Python-Dictionaries: Schlüssel und Wert ändern
Lernen Sie, wie Sie Dictionary-Werte ändern, Schlüssel umbenennen und mit update() sowie pop() Elemente in Python aktualisieren.
Python-Dictionaries ermöglichen es Ihnen, Daten als Schlüssel-Wert-Paare zu speichern und diese nach der Erstellung frei zu aktualisieren. Dieses Kapitel behandelt alle praktischen Methoden zur Änderung vorhandener Dictionary-Elemente: einen einzelnen Wert ändern, einen Schlüssel umbenennen, mit update() mehrere Einträge auf einmal aktualisieren und verschachtelte Dictionaries bearbeiten — einschließlich der Sonderfälle, denen Sie in echtem Code begegnen werden.
Hintergrundinformationen zur Funktionsweise von Dictionaries finden Sie im Kapitel Auf Dictionary-Elemente zugreifen. Um völlig neue Einträge hinzuzufügen, lesen Sie Dictionary-Elemente hinzufügen. Um Einträge zu löschen, lesen Sie Dictionary-Elemente entfernen.
Einen Wert ändern
Die einfachste Änderung besteht darin, den unter einem vorhandenen Schlüssel gespeicherten Wert neu zuzuweisen. Verwenden Sie den Schlüssel als Index auf der linken Seite einer Zuweisung:
Wenn der Schlüssel bereits vorhanden ist, wird der Wert an Ort und Stelle überschrieben. Die anderen Einträge sind nicht betroffen und das Dictionary behält seine Einfügereihenfolge (Python 3.7+).
Was passiert, wenn der Schlüssel nicht existiert?
Wenn Sie eine Zuweisung mit einem Schlüssel verwenden, der nicht bereits im Dictionary vorhanden ist, erstellt Python stillschweigend einen neuen Eintrag, anstatt einen Fehler auszulösen:
prices = {'apple': 1.00, 'banana': 0.50}
prices['mango'] = 2.50 # 'mango' did not exist — a new entry is created
print(prices)
# {'apple': 1.00, 'banana': 0.50, 'mango': 2.50}Wenn Sie nur aktualisieren möchten, sofern ein Schlüssel vorhanden ist, prüfen Sie zuerst mit in:
if 'banana' in prices:
prices['banana'] = 0.75Mehrere Elemente mit update() aktualisieren
dict.update() ermöglicht es Ihnen, mehrere Werte auf einmal zu ändern. Übergeben Sie ein Dictionary (oder Schlüsselwortargumente) mit den anzuwendenden Schlüssel-Wert-Paaren:
inventory = {'apple': 10, 'banana': 5, 'orange': 8}
inventory.update({'banana': 12, 'orange': 3})
print(inventory)
# {'apple': 10, 'banana': 12, 'orange': 3}Im Argument vorhandene Schlüssel überschreiben die bestehenden Werte; nicht erwähnte Schlüssel bleiben unverändert. Sie können auch Schlüsselwortargumente direkt übergeben:
inventory.update(apple=20, banana=15)
print(inventory)
# {'apple': 20, 'banana': 15, 'orange': 3}update() fügt außerdem alle Schlüssel aus dem Argument hinzu, die noch nicht im Ziel-Dictionary vorhanden sind, was es nützlich zum Zusammenführen zweier Dictionaries macht.
Einen Schlüssel umbenennen (ändern)
Dictionary-Schlüssel sind unveränderliche Referenzen — Sie können einen Schlüssel nicht direkt umbenennen. Das Standardverfahren besteht darin, einen neuen Schlüssel mit dem alten Wert hinzuzufügen und den alten Schlüssel zu löschen. Die Methode pop() erledigt beides in einem Ausdruck:
pop('banana') gibt 2 zurück und entfernt den Eintrag 'banana'. Das Zuweisen dieses Rückgabewerts zu my_dict['pear'] erstellt den umbenannten Eintrag.
Beachten Sie, dass der umbenannte Schlüssel am Ende des Dictionaries erscheint und nicht an der ursprünglichen Position von 'banana', da es sich um einen neuen eingefügten Schlüssel handelt.
Einen Schlüssel umbenennen, wenn Sie nicht sicher sind, ob er existiert
Wenn der Schlüssel möglicherweise fehlt, löst pop() einen KeyError aus. Übergeben Sie einen Standardwert als zweites Argument, um die Ausnahme zu vermeiden:
value = my_dict.pop('grape', None) # returns None if 'grape' is missing
if value is not None:
my_dict['kiwi'] = valueSchlüssel und Wert gleichzeitig ändern
Kombinieren Sie das Umbenennungsmuster mit einer Wertzuweisung, um beides auf einmal zu ändern:
Oder fassen Sie es in einem einzigen Schritt zusammen, indem Sie direkt den gewünschten Wert anstelle des mit pop zurückgegebenen Werts zuweisen:
my_dict = {'apple': 1, 'banana': 2, 'orange': 3}
my_dict.pop('banana') # remove old key (discard value)
my_dict['pear'] = 4 # insert new key with new value
print(my_dict)
# {'apple': 1, 'orange': 3, 'pear': 4}Elemente in einem verschachtelten Dictionary aktualisieren
Wenn ein Dictionary andere Dictionaries als Werte enthält, verwenden Sie verkettete Indizierung, um den inneren Wert zu erreichen:
catalog = {
'apple': {'price': 1.00, 'stock': 50},
'banana': {'price': 0.50, 'stock': 30},
}
# Update only the price of 'banana'
catalog['banana']['price'] = 0.75
print(catalog['banana'])
# {'price': 0.75, 'stock': 30}Sie können auch update() auf dem inneren Dictionary aufrufen:
catalog['apple'].update({'price': 1.20, 'stock': 45})
print(catalog['apple'])
# {'price': 1.20, 'stock': 45}Häufige Fallstricke
| Situation | Was passiert | Lösung |
|---|---|---|
| Zuweisung an einen fehlenden Schlüssel | Erstellt einen neuen Eintrag (kein Fehler) | Prüfen Sie zuerst if key in d, wenn Sie nur aktualisieren möchten |
pop() auf einem fehlenden Schlüssel aufrufen | Löst KeyError aus | Verwenden Sie d.pop(key, default) |
| Umbenennen behält die ursprüngliche Position nicht | Neuer Schlüssel landet am Ende | Falls Reihenfolge wichtig ist, Dictionary mit einem dict-Comprehension neu aufbauen |
update() mit überlappenden Schlüsseln | Überschreibt stillschweigend | Beabsichtigt — das ist der Zweck von update() |
Reihenfolge durch Neuaufbau erhalten
Wenn der umbenannte Schlüssel an seiner ursprünglichen Position bleiben soll, bauen Sie das Dictionary mit einem Comprehension neu auf:
my_dict = {'apple': 1, 'banana': 2, 'orange': 3}
my_dict = {
('pear' if k == 'banana' else k): v
for k, v in my_dict.items()
}
print(my_dict)
# {'apple': 1, 'pear': 2, 'orange': 3}Dabei wird über jeden vorhandenen Eintrag iteriert und der umbenannte Schlüssel nur dort ausgegeben, wo die Bedingung wahr ist, während alles andere unverändert bleibt.