EDIT:
Für Python3 (oder höher):
>>> mydict
{'four': 4, 'three': 3, 'one': 1}
>>> for k in list(mydict.keys()):
... if mydict[k] == 3:
... del mydict[k]
...
>>> mydict
{'four': 4, 'one': 1}
Der Rest der Antworten funktioniert gut mit Python2 arbeiten aber nicht für Python3 und erhebt RuntimeError
.
RuntimeError: Wörterbuch hat Größe während Iteration geändert.
Dies geschieht, weil mydict.keys()
gibt einen Iterator und keine Liste zurück. Wie in den Kommentaren erwähnt, konvertieren Sie einfach mydict.keys()
zu einer Liste von list(mydict.keys())
und es sollte funktionieren.
Für python2 :
Ein einfacher Test in der Konsole zeigt, dass Sie ein Wörterbuch nicht ändern können, während Sie darüber iterieren:
>>> 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 erwähnt, verursacht das Löschen von Einträgen Probleme, wenn der Iterator versucht, zum nächsten Eintrag zu gelangen. Verwenden Sie stattdessen die keys()
Methode, um eine Liste der Schlüssel zu erhalten und mit dieser zu arbeiten:
>>> for k in mydict.keys():
... if k == 'two':
... del mydict[k]
...
>>> mydict
{'four': 4, 'three': 3, 'one': 1}
Wenn Sie auf der Grundlage des Elementwerts löschen müssen, verwenden Sie die items()
Methode:
>>> for k, v in mydict.items():
... if v == 3:
... del mydict[k]
...
>>> mydict
{'four': 4, 'one': 1}