Der beste Weg, um ein Objekt aus einem Python-Wörterbuch zu entfernen?
Was ist der beste Weg, um entfernen Sie ein Element aus einem Wörterbuch, wenn das Element key ist unbekannt? 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 Möglichkeiten? Gibt es etwas falsch mit mutiert werden (löschen von items) aus dem Wörterbuch während der Iteration?
Kommentar zu dem Problem
Das unterstreichen Grund für das Verbot mutierend dict während der Iteration ist es, denn intern gibt es eine Reihenfolge für die iteration, wenn Sie mutieren Sie die Tasten, um die würde untergraben werden, die Ergebnisse unbekanntes Verhalten.
Mögliche Duplikate von so entfernen Sie einen Schlüssel aus einem python-dictionary?
InformationsquelleAutor der Frage Buttons840 | 2011-03-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sich bewusst sein, dass Sie gerade die Prüfung für die Objekt-Identität (
is
gibt nurTrue
wenn beide Operanden sind vertreten durch das gleiche Objekt im Speicher - das ist nicht immer der Fall mit zwei Objekt, vergleichen Sie gleich mit==
). Wenn Sie dies tun, mit Absicht, dann könnten Sie ändern Sie Ihren code wieAber dies kann nicht tun, was Sie wollen:
So dass Sie wahrscheinlich wollen
!=
stattis not
.InformationsquelleAutor der Antwort Tim Pietzcker
InformationsquelleAutor der Antwort N 1.1
InformationsquelleAutor der Antwort Kracekumar
Einen einfachen Vergleich zwischen del und pop():
Ergebnis:
So, del ist schneller als pop().
InformationsquelleAutor der Antwort Luu Tuan Anh
items()
gibt eine Liste, und es ist diese Liste, die Sie Durchlaufen, so mutiert das dict in der Schleife spielt keine Rolle hier. Wenn Sie wurden mititeritems()
stattdessen mutiert das dict in der Schleife wäre problematisch, und ebenso fürviewitems()
in Python 2.7.Ich kann nicht denken, einen besseren Weg, um entfernen von Elementen aus einem dict-Wert.
InformationsquelleAutor der Antwort mithrandi
Ich würde erstellen Sie eine Liste von Schlüsseln, die Notwendigkeit entfernen, dann entfernen Sie Sie. Es ist einfach, effizient und vermeidet das problem, gleichzeitig iteriert und mutiert die dict.
InformationsquelleAutor der Antwort
c ist das neue Wörterbuch, und a ist die ursprüngliche Wörterbuch, {'z','w'}
sind die Tasten, die Sie entfernen möchten aus einer
Überprüfen Sie auch: https://www.safaribooksonline.com/library/view/python-cookbook-3rd/9781449357337/ch01.html
InformationsquelleAutor der Antwort priya khokher
InformationsquelleAutor der Antwort user3559640
Es ist nichts falsch mit dem löschen von Elementen aus dem Wörterbuch während der Iteration, wie Sie vorgeschlagen habe. Vorsichtig sein, über mehrere threads mit der gleichen Wörterbuch zur gleichen Zeit, die einen KeyError oder andere Probleme.
Natürlich, siehe die Dokumentation auf http://docs.python.org/library/stdtypes.html#typesmapping
InformationsquelleAutor der Antwort Thane Anthem