Elemente entfernen
Alle Methoden zum Entfernen von Einträgen aus einem Python-Dictionary: pop(), popitem(), del, clear() und Dictionary Comprehensions mit Beispielen.
Python-Dictionaries sind veränderliche Schlüssel-Wert-Speicher, was bedeutet, dass Sie jederzeit Einträge hinzufügen, ändern und entfernen können. Dieses Kapitel behandelt alle gängigen Methoden zum Entfernen von Elementen aus einem Dictionary — pop(), popitem(), die del-Anweisung, clear() und Dictionary Comprehensions — mit praktischen Hinweisen dazu, wann welche Methode am besten geeignet ist und wie häufige Fehler vermieden werden.
Schnellvergleich
| Methode | Entfernt | Gibt zurück | Fehler bei fehlendem Schlüssel |
|---|---|---|---|
dict.pop(key) | Ein Schlüssel-Wert-Paar | Den entfernten Wert | KeyError (sofern kein Standard angegeben) |
dict.pop(key, default) | Ein Schlüssel-Wert-Paar | Den entfernten Wert oder den Standard | Nie |
dict.popitem() | Zuletzt eingefügtes Paar | (key, value)-Tupel | KeyError bei leerem Dictionary |
del dict[key] | Ein Schlüssel-Wert-Paar | Nichts | KeyError |
dict.clear() | Alle Paare | Nichts | Nie |
| Dict Comprehension | Ausgewählte Paare | Neues Dictionary | Nie |
Ein einzelnes Element mit pop() entfernen
dict.pop(key) entfernt das Schlüssel-Wert-Paar für den angegebenen Schlüssel und gibt den dort gespeicherten Wert zurück. Dies ist nützlich, wenn Sie den Wert nach dem Entfernen weiterverarbeiten möchten.
Einen Schlüssel entfernen und seinen Wert erfassen
Wenn der Schlüssel nicht existiert, wirft pop() einen KeyError:
inventory = {'apples': 10}
inventory.pop('oranges') # KeyError: 'oranges'Einen Standardwert verwenden, um KeyError zu vermeiden
Übergeben Sie ein zweites Argument an pop() als Fallback-Wert. Wenn der Schlüssel nicht vorhanden ist, gibt pop() den Standardwert zurück, anstatt einen Fehler auszulösen — das Dictionary bleibt unverändert.
Sicheres Entfernen mit einem Standardwert
inventory = {'apples': 10, 'cherries': 20}
removed = inventory.pop('oranges', 0)
print(removed) # 0
print(inventory) # {'apples': 10, 'cherries': 20}Dieses Muster ist eine saubere Alternative zur Überprüfung von if key in dict vor dem Aufruf von pop().
Das zuletzt eingefügte Element mit popitem() entfernen
dict.popitem() entfernt das zuletzt eingefügte Schlüssel-Wert-Paar und gibt es als (key, value)-Tupel zurück. Vor Python 3.7, das die Einfügereihenfolge garantiert, war dies das wichtigste Werkzeug zum iterativen Verarbeiten und Leeren eines Dictionarys.
Das zuletzt eingefügte Element entfernen
scores = {'alice': 95, 'bob': 82, 'carol': 78}
last_item = scores.popitem()
print(last_item) # ('carol', 78)
print(scores) # {'alice': 95, 'bob': 82}popitem() wirft einen KeyError, wenn das Dictionary leer ist. Verwenden Sie es, wenn Sie alle Elemente einzeln verarbeiten und dabei verbrauchen möchten (stapelartiges Vorgehen), oder wenn Sie nur den zuletzt hinzugefügten Eintrag entfernen möchten.
Ein Element mit del entfernen
Die del-Anweisung entfernt ein Schlüssel-Wert-Paar anhand des Schlüssels, ohne einen Wert zurückzugeben. Verwenden Sie sie, wenn Sie den Eintrag nur löschen möchten und der entfernte Wert nicht benötigt wird.
Einen Schlüssel mit del löschen
Wie pop() ohne Standardwert wirft del einen KeyError, wenn der Schlüssel fehlt:
del user['phone'] # KeyError: 'phone'del vs pop() — welche Methode verwenden?
- Verwenden Sie
del, wenn Sie den Eintrag verwerfen möchten und den Wert nicht benötigen. - Verwenden Sie
pop(), wenn Sie den entfernten Wert benötigen oder einen sicheren Leerlauf wünschen, falls der Schlüssel möglicherweise nicht vorhanden ist.
Alle Elemente mit clear() entfernen
dict.clear() leert das Dictionary direkt und hinterlässt ein leeres {}. Das Dictionary-Objekt selbst bleibt bestehen, sodass jede andere Variable, die auf dasselbe Dictionary verweist, ebenfalls ein leeres Dictionary sieht.
Alle Einträge löschen
config = {'host': 'localhost', 'port': 5432, 'debug': True}
config.clear()
print(config) # {}Im Vergleich zur Neuzuweisung config = {}: Eine Neuzuweisung erstellt ein neues Dictionary-Objekt und lässt alle anderen Referenzen auf das alte (noch befüllte) Dictionary zeigen. clear() verändert das gleiche Objekt.
config = {'host': 'localhost', 'port': 5432}
alias = config # alias and config point to the same dict
config = {} # only config is updated; alias still has data
print(alias) # {'host': 'localhost', 'port': 5432}
config = {'host': 'localhost', 'port': 5432}
alias = config
config.clear() # modifies the shared object
print(alias) # {}Mehrere bestimmte Schlüssel entfernen
Python hat keine eingebaute Methode zum gleichzeitigen Entfernen mehrerer Schlüssel, aber es gibt zwei idiomatische Ansätze.
Schleife mit pop()
settings = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
to_remove = ['b', 'd']
for key in to_remove:
settings.pop(key, None) # None default = safe even if key is absent
print(settings) # {'a': 1, 'c': 3}Dictionary Comprehension
Eine Dict Comprehension erstellt ein neues Dictionary, das die unerwünschten Schlüssel ausschließt. Dies ist vorzuziehen, wenn Sie das Original unverändert lassen möchten.
Ein Dictionary per Comprehension filtern
Sie können auch nach Wert statt nach Schlüssel filtern:
scores = {'alice': 95, 'bob': 40, 'carol': 78, 'dan': 35}
passing = {name: score for name, score in scores.items() if score >= 50}
print(passing) # {'alice': 95, 'carol': 78}Elemente während der Iteration entfernen — der häufige Fallstrick
Das Verändern eines Dictionarys während der Iteration löst in Python 3 einen RuntimeError aus:
data = {'a': 1, 'b': 2, 'c': 3}
# This raises RuntimeError: dictionary changed size during iteration
for key in data:
if data[key] < 2:
del data[key]Das sichere Muster ist, über eine Kopie der Schlüssel zu iterieren:
data = {'a': 1, 'b': 2, 'c': 3}
for key in list(data): # list() snapshots the keys
if data[key] < 2:
del data[key]
print(data) # {'b': 2, 'c': 3}Alternativ kann ein neues Dictionary per Comprehension erstellt werden (wie oben im Abschnitt zur Comprehension gezeigt) — das ist oft der sauberste Ansatz.
Weitere Informationen zum sicheren Iterieren über Dictionaries finden Sie unter Loop Dictionaries.
Die richtige Methode wählen
- Benötigen Sie den entfernten Wert? Verwenden Sie
pop(key). - Der Schlüssel existiert möglicherweise nicht? Verwenden Sie
pop(key, default), um einenKeyErrorzu vermeiden. - Nur löschen, Wert nicht benötigt? Verwenden Sie
del dict[key]. - Den zuletzt eingefügten Eintrag entfernen? Verwenden Sie
popitem(). - Alles löschen? Verwenden Sie
clear(). - Anhand einer Bedingung oder mehrerer Schlüssel entfernen? Verwenden Sie eine Dict Comprehension oder eine
for key in list(dict)-Schleife.