d1 = {'a': 1, 'b': 2}
d2 = {'a': 1}
l = [d1, d2, d1, d2, d1, d2]
для i в диапазоне (len (l)):
если l [i] .has_key ('b'):
del l [i] ['b']
печать л
Вот небольшой обзор вашего кода:
- итерации по списку выполняются не так, как в C. Если вам не нужна ссылка на индекс списка, лучше использовать для элемента в l, а затем заменить l [i] на item.
- для проверки существования ключа вы можете просто написать, если 'b' в l [i]
Итак, ваш код становится:
for item in l:
if 'b' in item:
del item['b']
Еще одна вещь, с которой вам нужно быть осторожным, это то, что на первой итерации, которая вызывает del, вы фактически удалите все, что вам нужно, поскольку d1 является изменяемым. Вы должны думать, что d1 является ссылкой, а не значением (немного похоже на указатель в C).
Как сказал Леннарт Регебро, чтобы оптимизировать ваш код, вы также можете использовать списочное понимание.