Вы не можете удалять элементы из списка во время итерации по нему, потому что индексы списка меняются при удалении элементов.Также del d
просто удалил имя d
, словарь все еще будет существовать в списке.
Лучшее решение здесь - создать новый список с отфильтрованными нежелательными элементами:
data = [d for d in data if d['one'] != 3]
Если важно изменить существующий список data
, потому что есть другие ссылки на него, которые также должны видеть изменения, которые вы можете использовать для назначения фрагмента, чтобы обновить исходный список, но это обычно не требуется:
data[:] = [d for d in data if d['one'] != 3]