425 Stimmen

Löschen Sie einen Wörterbucheintrag, wenn der Schlüssel vorhanden ist

Gibt es einen anderen Weg, ein Element in einem Wörterbuch nur zu löschen, wenn der angegebene Schlüssel vorhanden ist, außer:

if key in mydict:
    del mydict[key]

Das Szenario ist, dass mir eine Sammlung von Schlüsseln gegeben wird, die aus einem bestimmten Wörterbuch entfernt werden sollen, aber ich bin nicht sicher, ob alle von ihnen im Wörterbuch vorhanden sind. Nur für den Fall, dass mir eine effizientere Lösung entgeht.

906voto

Adem Öztaş Punkte 19003

Sie können dict.pop verwenden:

 mydict.pop("key", None)

Beachten Sie, dass wenn das zweite Argument, d.h. None, nicht angegeben wird, ein KeyError ausgelöst wird, wenn der Schlüssel nicht im Wörterbuch vorhanden ist. Durch das Bereitstellen des zweiten Arguments wird die bedingte Ausnahme verhindert.

27voto

mgilson Punkte 280928

Es gibt auch:

versuchen:
    del mydict[key]
ausgenommen KeyError:
    pass

Dies führt nur 1 Suchvorgang durch anstelle von 2. Allerdings sind except-Klauseln teuer, also wenn Sie häufig auf die except-Klausel stoßen, wird dies wahrscheinlich weniger effizient sein als das, was Sie bereits haben.

6voto

hughdbrown Punkte 45214

Ansatz: Berechnen der zu entfernenden Schlüssel, mutieren des Dictionary

Wir nennen die Liste/den Iterator der Schlüssel, die Sie entfernen müssen, keys. Ich würde Folgendes tun:

keys_to_remove = set(keys).intersection(set(mydict.keys()))
for key in keys_to_remove:
    del mydict[key]

Sie berechnen im Voraus alle betroffenen Elemente und arbeiten mit ihnen.

Ansatz: Berechnen der zu behaltenden Schlüssel, neues Dictionary mit diesen Schlüsseln erstellen

Ich bevorzuge es, ein neues Dictionary zu erstellen, anstatt ein bestehendes zu verändern. Daher würde ich wahrscheinlich auch Folgendes in Betracht ziehen:

keys_to_keep = set(mydict.keys()) - set(keys)
new_dict = {k: v for k, v in mydict.iteritems() if k in keys_to_keep}

oder:

keys_to_keep = set(mydict.keys()) - set(keys)
new_dict = {k: mydict[k] for k in keys_to_keep}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X