W3docs

Elemente zu einem Python-Dictionary hinzufügen

Vier Methoden zum Hinzufügen von Einträgen in Python-Dictionaries: Eckige Klammern, update(), setdefault() und der Merge-Operator ab Python 3.9.

Python-Dictionaries sind veränderliche, geordnete (seit Python 3.7) Sammlungen von Schlüssel-Wert-Paaren. Da sie veränderlich sind, können nach der Erstellung jederzeit neue Einträge hinzugefügt werden. Dieses Kapitel behandelt alle gängigen Techniken zum Hinzufügen von Elementen zu einem Dictionary, einschließlich der Merge-Operatoren ab Python 3.9, mit praktischen Hinweisen darauf, wann welche Methode am besten geeignet ist.

Was ist ein Python-Dictionary?

Ein Dictionary speichert Daten als Schlüssel-Wert-Paare innerhalb von geschweiften Klammern {}. Schlüssel müssen eindeutig und unveränderlich sein (Strings, Zahlen oder Tupel); Werte können beliebige Python-Objekte sein.

# A simple dictionary
person = {'name': 'Alice', 'age': 30, 'city': 'New York'}

Schlüssel sind eindeutig — wenn einem bereits vorhandenen Schlüssel ein Wert zugewiesen wird, wird der alte Wert überschrieben, nicht dupliziert. Beachten Sie dieses Verhalten beim Durcharbeiten der folgenden Methoden.

Möglichkeiten zum Hinzufügen von Elementen zu einem Dictionary

Verwendung von eckigen Klammern

Die einfachste Möglichkeit, ein neues Schlüssel-Wert-Paar hinzuzufügen, ist die direkte Zuweisung mit eckigen Klammern:

python— editable, runs on the server

Ausgabe:

{'name': 'John', 'age': 25, 'city': 'New York', 'gender': 'Male'}

Wenn der Schlüssel bereits vorhanden ist, wird der Wert ersetzt und nicht neu hinzugefügt:

my_dict = {'name': 'John', 'age': 25}

my_dict['age'] = 30  # overwrites 25

print(my_dict)
# {'name': 'John', 'age': 30}

Verwenden Sie die Zuweisung mit eckigen Klammern, wenn Sie einen einzelnen Schlüssel hinzufügen oder aktualisieren möchten, dessen Name zum Schreibzeitpunkt bekannt ist.

Verwendung der Methode update()

dict.update() fügt ein oder mehrere Schlüssel-Wert-Paare in einem einzigen Aufruf in das Dictionary ein. Sie können ein weiteres Dictionary, ein iterierbares Objekt mit (key, value)-Paaren oder Schlüsselwortargumente übergeben.

Ein zweites Dictionary zusammenführen:

python— editable, runs on the server

Ausgabe:

{'name': 'John', 'age': 25, 'city': 'New York', 'gender': 'Male', 'occupation': 'Software Engineer'}

Mehrere Schlüssel gleichzeitig mit Schlüsselwortargumenten hinzufügen:

my_dict = {'name': 'John', 'age': 25}

my_dict.update(city='New York', gender='Male')

print(my_dict)
# {'name': 'John', 'age': 25, 'city': 'New York', 'gender': 'Male'}

Wie die Zuweisung mit eckigen Klammern überschreibt update() vorhandene Schlüssel. Verwenden Sie diese Methode, wenn Sie mehrere Einträge auf einmal hinzufügen oder aktualisieren möchten.

Verwendung der Methode setdefault()

dict.setdefault(key, default) fügt einen Schlüssel nur dann hinzu, wenn er noch nicht vorhanden ist. Wenn der Schlüssel existiert, gibt die Methode den vorhandenen Wert zurück, ohne etwas zu ändern.

python— editable, runs on the server

Ausgabe:

{'name': 'John', 'age': 25, 'city': 'New York', 'gender': 'Male'}

Wenn der Schlüssel bereits vorhanden ist, lässt setdefault() ihn unverändert und gibt den aktuellen Wert zurück:

my_dict = {'name': 'John', 'age': 25}

result = my_dict.setdefault('name', 'Alice')

print(result)   # John  — not overwritten
print(my_dict)  # {'name': 'John', 'age': 25}

setdefault() ist das richtige Werkzeug, wenn Sie einen Schlüssel mit einem Standardwert initialisieren möchten, ohne versehentlich bereits vorhandene Daten zu überschreiben. Ein gängiges Muster ist das Initialisieren eines fehlenden Schlüssels mit einer leeren Liste, bevor Elemente daran angehängt werden:

groups = {}

for item in ['apple', 'banana', 'avocado']:
    letter = item[0]
    groups.setdefault(letter, []).append(item)

print(groups)
# {'a': ['apple', 'avocado'], 'b': ['banana']}

Verwendung der Merge-Operatoren (Python 3.9+)

Python 3.9 hat zwei Operatoren eingeführt, die eine prägnante Syntax zum Kombinieren von Dictionaries bieten.

| — ein neues zusammengeführtes Dictionary erstellen (nicht destruktiv):

d1 = {'a': 1, 'b': 2}
d2 = {'c': 3, 'd': 4}

d3 = d1 | d2  # d1 and d2 are unchanged

print(d3)
# {'a': 1, 'b': 2, 'c': 3, 'd': 4}

|= — an Ort und Stelle aktualisieren (entspricht update(), aber kürzer):

d1 = {'a': 1, 'b': 2}
d2 = {'c': 3, 'd': 4}

d1 |= d2  # d1 is modified

print(d1)
# {'a': 1, 'b': 2, 'c': 3, 'd': 4}

Bei überlappenden Schlüsseln gewinnt der rechte Operand — gleiche Priorität wie bei update(). Diese Operatoren erfordern Python 3.9 oder höher; verwenden Sie update() für eine breitere Kompatibilität.

Verwendung von dict.fromkeys() zum Vorbelegen eines Dictionarys

dict.fromkeys(keys, default) ist eine Klassenmethode, die ein brandneues Dictionary aus einem iterierbaren Objekt mit Schlüsseln und einem optionalen Standardwert erstellt. Sie fügt einem vorhandenen Dictionary keine Elemente hinzu.

# Create a dictionary with a shared default value
template = dict.fromkeys(['name', 'age', 'city'], 'Unknown')

print(template)
# {'name': 'Unknown', 'age': 'Unknown', 'city': 'Unknown'}

# You can then populate it with real values
template['name'] = 'Alice'
template['age'] = 28

print(template)
# {'name': 'Alice', 'age': 28, 'city': 'Unknown'}

fromkeys() ist nützlich, um ein Dictionary vorzubereiten, wenn die Schlüssel im Voraus bekannt sind, die Werte aber erst später eingetragen werden.

Die richtige Methode wählen

ZielMethode
Einen einzelnen Schlüssel hinzufügen oder überschreibendict[key] = value
Mehrere Schlüssel hinzufügen oder überschreibendict.update(...) oder dict |= other (3.9+)
Einen Schlüssel nur hinzufügen, wenn er fehltdict.setdefault(key, default)
Zwei Dictionaries zu einem dritten zusammenführennew = a | b (3.9+)
Ein neues Dictionary aus einer Schlüsselliste erstellendict.fromkeys(keys, default)

Verwandte Kapitel

Übungen

Übung
Which of the following are valid ways to add a new key-value pair to an existing Python dictionary?
Which of the following are valid ways to add a new key-value pair to an existing Python dictionary?
Was this page helpful?