BEARBEITEN:
Diese Antwort funktioniert nicht für Python3 und gibt eine RuntimeError
.
RuntimeError: Das Wörterbuch hat während der Iteration seine Größe geändert.
Dies liegt daran, dass mydict.keys()
ein Iterator keine Liste zurückgibt. Wie in den Kommentaren erwähnt, konvertieren Sie einfach mydict.keys()
in eine Liste von list(mydict.keys())
und es sollte funktionieren.
Ein einfacher Test in der Konsole zeigt, dass Sie ein Wörterbuch nicht ändern können, während Sie es durchlaufen:
>>> 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
Wie in der Antwort von delnan angegeben, verursacht das Löschen von Einträgen Probleme, wenn der Iterator versucht, zum nächsten Eintrag überzugehen. Verwenden Sie stattdessen die keys()
Methode, um eine Liste der Schlüssel abzurufen und damit zu arbeiten:
>>> for k in mydict.keys():
... if k == 'two':
... del mydict[k]
...
>>> mydict
{'four': 4, 'three': 3, 'one': 1}
Wenn Sie basierend auf dem Elementwert löschen müssen, verwenden Sie items()
stattdessen die folgende Methode:
>>> for k, v in mydict.items():
... if v == 3:
... del mydict[k]
...
>>> mydict
{'four': 4, 'one': 1}