Удалить словарь по значению

Имеется список словарей:

a = [{"word": "c", "count": 4}, {"word": "dog", "count": 2}, {"word": "_restore", "count": 1}, {"word": "-f", "count": 5}....]

Необходимо удалить те словари, в которых значение длины ключа "word" равно 1 и первый символ равен одному из этих знаков ['-', '_']

Пробовала реализовать это следующим образом, но выводит список без изменений

sp = []
for i in range(0, len(a)):
    if len(a[i]['word']) == 1 or a[i]['word'][0] in ['-', '_']:
        del a[i]

Ответы (1 шт):

Автор решения: Zhihar

лучше не удалять из списка, а собрать список заново:

a = [{"word": "c", "count": 4}, {"word": "dog", "count": 2}, {"word": "_restore", "count": 1}, {"word": "-f", "count": 5}]

a = [obj for obj in a if len(obj['word']) != 1 and obj['word'][0] not in ('_', '-')]

print(a)

кроме того у вас в условии написано И (в которых значение длины ключа "word" равно 1 и первый символ равен одному из этих знаков ['-', '_']), а в коде ИЛИ

я в примере привел вариант с ИЛИ

Но поскольку я не удаляю, а собираю список с нужными элементами, то условие такое:

размер не 1 и первый символ не '-' или '_'

→ Ссылка