Ein Element aus einem Wörterbuch entfernen, wenn sein Schlüssel unbekannt ist
Wie entfernt man am besten ein Element aus einem Wörterbuch nach Wert, d. h. wenn der Schlüssel des Elements unbekannt ist? Hier ist ein einfacher Ansatz:
for key, item in some_dict.items():
if item is item_to_remove:
del some_dict[key]
Gibt es bessere Methoden? Ist etwas falsch daran, Elemente im Wörterbuch zu verändern (zu löschen), während es iteriert wird?
109
3
Seien Sie sich bewusst, dass Sie derzeit auf Objektidentität testen (
ist
gibt nurTrue
zurück, wenn beide Operanden durch dasselbe Objekt im Speicher repräsentiert werden - dies ist bei zwei Objekten, die mit==
gleich sind, nicht immer der Fall). Wenn Sie dies absichtlich tun, dann könnten Sie Ihren Code umschreiben alsAber das führt vielleicht nicht zu dem, was Sie wollen:
Du willst also wahrscheinlich
!=
anstelle vonist nicht
.items()
gibt eine Liste zurück, und es ist diese Liste, die Sie iterieren, so dass die Änderung des Diktats in der Schleife hier keine Rolle spielt. Wenn Sie stattdesseniteritems()
verwenden würden, wäre das Ändern des Diktats in der Schleife problematisch1, und dasselbe gilt fürviewitems()
in Python 2.7.Ich kann mir keinen besseren Weg vorstellen, um Elemente aus einem Diktat nach Wert zu entfernen.
Es ist nichts falsch daran, Elemente aus dem Wörterbuch zu löschen, während man iteriert, wie Sie vorgeschlagen haben. Seien Sie vorsichtig, wenn mehrere Threads das gleiche Wörterbuch gleichzeitig verwenden, da dies zu einem KeyError oder anderen Problemen führen kann.
Natürlich, siehe die Dokumente auf http://docs.python.org/library/stdtypes.html#typesmapping