Was ist der beste Weg, um entfernen Sie ein dictionary-Element durch den Wert in python?
Ich Frage mich, ob es einfach Weg, um zu entfernen eine oder mehr Wörterbuch element(s) aus einem python-Wörterbuch von Wert.
Wir haben ein Wörterbuch, genannt myDict
:
myDict = {1:"egg", "Answer":42, 8:14, "foo":42}
wollen und entfernen alle Gegenstände, die Werte sind gleich 42
.
Umsetzung Vorschlag:
- Erhalten eine Liste aller Schlüssel eines bestimmten Wertes in
myDict
(Siehe zum Beispiel Holen Sie sich Schlüssel-Wert in dictionary.) - Löschen dieses dict-element oder die Elemente (basierend auf den gefundenen Schlüssel) vom
myDict
(weitere Informationen finden Sie unter Löschen Sie ein element aus einem dictionary.)
Also, was tun Sie denken, jetzt ist die elegantesten und die meisten "pythonic" Art und Weise zu implementieren, die dieses problem in Python?
Der Wunsch, "Holen Sie sich die erste ... die Taste der Wert in myDict" ist ein bisschen fragwürdig, @elegent, wie der Begriff der erste nicht wirklich zu den Wörterbüchern.
Ja, Sie haben absolut Recht! Vielen Dank für den Hinweis. Ich aktualisierte die Frage 🙂
Ja, Sie haben absolut Recht! Vielen Dank für den Hinweis. Ich aktualisierte die Frage 🙂
InformationsquelleAutor elegent | 2015-03-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie eine einfache
dict
Verständnis:Als solche:
item, key
und name würde eskey, val
statt und verwendenval != 42
weil es mehr semantisch korrekt.Vielen Dank für deine Antwort! Ein
dict
-Verständnis ist eine nette Idee, aber meiner Meinung nach die Frage war etwa, wie zu entfernen Elemente bilden eine dict. Ich weiß, dass wir nur zuweisen müssen, die daraus resultierenden dict der Erkenntnis zumyDict
:myDict = {key:val for key, val in myDict.items() if val != 42}
, so dass, wenn es ist bequem zu Ihnen, bitte ändern Sie Ihre Antwort.geändert 🙂
InformationsquelleAutor A.J. Uppal
Müssen Sie eine Kopie erstellen zu Durchlaufen, wie verändern die Größe des dictionary innerhalb einer Schleife bewirkt einen Absturz mit Laufzeitfehler. Iterieren über die Schlüssel-Wert-Paare in Ihrem Wörterbuch kopieren mit items() und vergleichen jeden Wert den Wert, den Sie suchen. Wenn Sie übereinstimmen, löschen Sie den Schlüssel aus dem dictionary.
Hinzufügen Antwort für die Frage in den Kommentaren unten, wie es war zu groß für einen Kommentar. Hier ist eine schnelle Konsole-Sitzung zeigen, dass
mydict.copy()
unddict(myDict)
das gleiche erreichen.myDict.copy()
ist effizienterIch bin damit einverstanden. Vielen Dank für den Hinweis. Dies würde auch die Arbeit und die Beseitigung der extra-Zeile eine Kopie erstellen, bevor die Schleife:
for key, value in dict(myDict).items():
Ich danke Ihnen sehr für Ihre Antwort! Vielleicht können Sie Bearbeiten Sie Ihre Antwort nach Ihrem Befehl.
Froh, dass ich helfen konnte. Ich werde Bearbeiten Sie die Antwort, um die änderungen widerzuspiegeln.
Was ist der Unterschied zwischen
myDict.copy()
unddict(myDict)
?InformationsquelleAutor cruane
Ich mag folgenden eine "Hitliste" Ansatz, wo man Durchlaufen Sie das Wörterbuch, dann fügen Sie die, die Sie löschen möchten, in eine Liste, dann nach Durchlaufen, löschen Sie die Einträge aus, die Liste in etwa so:
hitList =[]
für dictEntry: if test Bedingung, hitList.append
für den Eintrag in der Trefferliste:
löschen dict[Eintrag]
dies ist nur etwas pseudocode, aber ich habe erfolgreich mit dieser in der Vergangenheit
InformationsquelleAutor NevDev
Können Sie iterieren über eine Kopie und eine-Suche:
Oder nur kopieren Sie den Schlüssel:
Die, wenn Sie wollen, mutieren Sie die original-dict sollte die effizienteste sein.
reversed()
umkehren der Liste der Schlüssel? Die Elemente (d.h. die Schlüssel-Wert-Paare) sind nicht sortiert in einem dict, daher die änderung der Bestellung ist ein unnötiger Schritt meiner Meinung nach.versuchen Sie, es zu tun, ohne Umkehrung, und Sie werden sehen
... , dass es funktioniert! 🙂 BTW, brauchen Sie nicht, 3 schließende Klammer...
ja, ein Tippfehler. Ja, Liste(dict) für python2 und 3
Ok kein problem, danke für deine Antwort. Ich war nur ein bisschen verwirrt. 🙂
InformationsquelleAutor Padraic Cunningham
Verwenden Sie ein Wörterbuch Verständnis.
wenn Sie eine Kopie verwenden
iteritems()
wenn Sie nicht brauchen, eine Kopie von Ihrem Wörterbuch, die Sie verwenden können
viewitems()
Danke! In Python 3.x wir verwenden nur
.items()
statt.iteritems()
undviewitems()
?ja, es gibt Unterschiede in python 3.x und 2.x aber deine Frage ist nicht markiert mit einem python-version, so bin ich davon ausgegangen, Sie waren auf der Suche für ein 2.x-Lösung.
Ja, sorry, du hast Recht. Wenn es ist bequem für Sie, fügen Sie diese zusätzlichen Informationen, um Ihre Antwort, damit wir sehen können, der Unterschied zwischen den beiden Python-Versionen. 🙂
InformationsquelleAutor kasper Taeymans