W3docs

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:

python— editable, runs on the server

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.75

Mehrere 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:

python— editable, runs on the server

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'] = value

Schlüssel und Wert gleichzeitig ändern

Kombinieren Sie das Umbenennungsmuster mit einer Wertzuweisung, um beides auf einmal zu ändern:

python— editable, runs on the server

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

SituationWas passiertLösung
Zuweisung an einen fehlenden SchlüsselErstellt 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 aufrufenLöst KeyError ausVerwenden Sie d.pop(key, default)
Umbenennen behält die ursprüngliche Position nichtNeuer Schlüssel landet am EndeFalls Reihenfolge wichtig ist, Dictionary mit einem dict-Comprehension neu aufbauen
update() mit überlappenden SchlüsselnÜberschreibt stillschweigendBeabsichtigt — 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.

Übungsaufgaben

Übung
In Python, how can you change the items in a list?
In Python, how can you change the items in a list?
Was this page helpful?