W3docs

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

MethodeEntferntGibt zurückFehler bei fehlendem Schlüssel
dict.pop(key)Ein Schlüssel-Wert-PaarDen entfernten WertKeyError (sofern kein Standard angegeben)
dict.pop(key, default)Ein Schlüssel-Wert-PaarDen entfernten Wert oder den StandardNie
dict.popitem()Zuletzt eingefügtes Paar(key, value)-TupelKeyError bei leerem Dictionary
del dict[key]Ein Schlüssel-Wert-PaarNichtsKeyError
dict.clear()Alle PaareNichtsNie
Dict ComprehensionAusgewählte PaareNeues DictionaryNie

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

python— editable, runs on the server

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

python— editable, runs on the server

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

python— editable, runs on the server

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 einen KeyError zu 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.

Übungen

Übung
Which method removes a key from a Python dictionary and returns its value?
Which method removes a key from a Python dictionary and returns its value?
Was this page helpful?