MODIFICARE:
Questa risposta non funzionerà per Python3 e fornirà a RuntimeError
.
RuntimeError: il dizionario ha cambiato dimensione durante l'iterazione.
Ciò accade perché mydict.keys()
restituisce un iteratore non un elenco. Come sottolineato nei commenti, è sufficiente convertirlo mydict.keys()
in un elenco list(mydict.keys())
e dovrebbe funzionare.
Un semplice test nella console mostra che non è possibile modificare un dizionario mentre si scorre su di esso:
>>> 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
Come indicato nella risposta di delnan, l'eliminazione delle voci causa problemi quando l'iteratore tenta di passare alla voce successiva. Invece, usa il keys()
metodo per ottenere un elenco delle chiavi e lavorare con quello:
>>> for k in mydict.keys():
... if k == 'two':
... del mydict[k]
...
>>> mydict
{'four': 4, 'three': 3, 'one': 1}
Se è necessario eliminare in base al valore degli elementi, utilizzare items()
invece il metodo:
>>> for k, v in mydict.items():
... if v == 3:
... del mydict[k]
...
>>> mydict
{'four': 4, 'one': 1}