ÉDITER:
Cette réponse ne fonctionnera pas pour Python3 et donnera un RuntimeError
.
RuntimeError: la taille du dictionnaire a changé pendant l'itération.
Cela se produit car mydict.keys()
renvoie un itérateur et non une liste. Comme indiqué dans les commentaires, il suffit de convertir mydict.keys()
en liste list(mydict.keys())
et cela devrait fonctionner.
Un simple test dans la console montre que vous ne pouvez pas modifier un dictionnaire en itérant dessus:
>>> 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
Comme indiqué dans la réponse de delnan, la suppression d'entrées provoque des problèmes lorsque l'itérateur essaie de passer à l'entrée suivante. Utilisez plutôt la keys()
méthode pour obtenir une liste des clés et travaillez avec:
>>> for k in mydict.keys():
... if k == 'two':
... del mydict[k]
...
>>> mydict
{'four': 4, 'three': 3, 'one': 1}
Si vous devez supprimer en fonction de la valeur des éléments, utilisez items()
plutôt la méthode:
>>> for k, v in mydict.items():
... if v == 3:
... del mydict[k]
...
>>> mydict
{'four': 4, 'one': 1}