EDITAR:
Esta resposta não funcionará para Python3 e fornecerá a RuntimeError
.
RuntimeError: o dicionário mudou de tamanho durante a iteração.
Isso acontece porque mydict.keys()
retorna um iterador, não uma lista. Conforme indicado nos comentários, basta converter mydict.keys()
em uma lista por list(mydict.keys())
e deve funcionar.
Um teste simples no console mostra que você não pode modificar um dicionário enquanto itera sobre ele:
>>> mydict = {'one': 1, 'two': 2, 'three': 3, 'four': 4}
>>> for k, v in mydict.iteritems():
... if k == 'two':
... del mydict[k]
...
------------------------------------------------------------
Traceback (most recent call last):
File "<ipython console>", line 1, in <module>
RuntimeError: dictionary changed size during iteration
Conforme indicado na resposta de delnan, a exclusão de entradas causa problemas quando o iterador tenta passar para a próxima entrada. Em vez disso, use o keys()
método para obter uma lista das chaves e trabalhar com isso:
>>> for k in mydict.keys():
... if k == 'two':
... del mydict[k]
...
>>> mydict
{'four': 4, 'three': 3, 'one': 1}
Se você precisar excluir com base no valor dos itens, use o items()
método:
>>> for k, v in mydict.items():
... if v == 3:
... del mydict[k]
...
>>> mydict
{'four': 4, 'one': 1}