HOWTO · Python

Hinzufügen von Schlüssel-Wert-Paaren zu einem Dictionary innerhalb einer Schleife in Python

Erfahren Sie, wie Sie einem Dictionary innerhalb einer Schleife in Python Schlüssel-Wert-Paare hinzufügen.

Auf dieser Seite

Eine Dictionary-Zuweisung fügt einen Eintrag hinzu oder aktualisiert ihn: Setze dictionary[key] = value in eine Schleife. Wenn Schlüssel und Werte in getrennten Iterables vorliegen, kannst du sie mit zip() in einer for-Schleife paaren. Eine while-Schleife eignet sich, wenn der Index selbst wichtig ist.

Schlüssel-Wert-Paare innerhalb einer Schleife zu einem Dictionary hinzufügen

Beginne mit einem Dictionary und weise dann jedem Schlüssel den zugehörigen Wert zu, während die Schleife die Paare durchläuft. Die Werte können unterschiedliche Python-Objekte sein; die Schlüssel müssen hashbar sein. Das folgende Beispiel ordnet Namen Punktzahlen zu:

Schlüssel und Werte mit zip() paaren

zip(keys, values) liefert bei jedem Schleifendurchlauf ein Paar aus den beiden Iterables. Führe dieses Beispiel aus:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

keys = ["Ada", "Linus", "Grace"]
values = [98, 91, 100]

scores = {}
for key, value in zip(keys, values):
    scores[key] = value

print(scores)
{'Ada': 98, 'Linus': 91, 'Grace': 100}

Durch die Zuweisung wird jede Punktzahl unter dem zugehörigen Namen gespeichert. Dieses Muster funktioniert auch mit Listen, Funktionen und anderen Objekten als Werten; hashbar müssen nur die Dictionary-Schlüssel sein.

Eine while-Schleife verwenden, wenn du Indizes benötigst

Eine indexbasierte Schleife ist nützlich, wenn ein weiterer Vorgang die Position benötigt. Lege einen Endpunkt fest und erhöhe den Index bei jedem Durchlauf:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

keys = ["Ada", "Linus", "Grace"]
values = [98, 91, 100]
scores = {}
index = 0
limit = min(len(keys), len(values))

while index < limit:
    scores[keys[index]] = values[index]
    index += 1

Hier stellt limit sicher, dass die Schleife nur auf Positionen zugreift, die in beiden Listen vorhanden sind. Für das gewöhnliche Paaren ist for key, value in zip(keys, values) kürzer und erspart die manuelle Verwaltung des Index.

Ungleich lange Eingaben und vorhandene Schlüssel behandeln

Standardmäßig hält zip() an, sobald das kürzeste Iterable erschöpft ist. Nicht zugeordnete Elemente eines längeren Iterables bleiben unberücksichtigt. Wenn jeder Schlüssel einen Wert erhalten muss, vergleiche vor der Schleife die Längen der Eingaben und lege fest, wie dein Programm mit einer Abweichung umgehen soll.

Eine Zuweisung an einen Schlüssel, der bereits im Dictionary vorhanden ist, ersetzt dessen bisherigen Wert. Sie erzeugt keinen zweiten Eintrag mit demselben Schlüssel. Wenn du beide Werte behalten möchtest, speichere eine Sammlung als Wert und füge den weiteren Wert dort hinzu. Ein Schlüssel muss hashbar sein: Zeichenfolgen, Zahlen und Tupel aus hashbaren Elementen eignen sich, veränderliche Listen und Dictionaries dagegen nicht.

Ergebnis ausgeben und Komplexität verstehen

Mit print(scores) kannst du ein kleines Dictionary anzeigen. Alternativ kannst du über scores.items() iterieren, um Schlüssel und Werte zu formatieren. Für die Werte im Beispiel ist die einfache Dictionary-Darstellung deterministisch. Bei benutzerdefinierten Objekten kann die Darstellung eine Speicheradresse enthalten. Gib deshalb bestimmte Attribute aus, wenn du eine gut lesbare und wiederholbare Ausgabe benötigst.

Bei m Paaren führt die Schleife m Zuweisungen aus. Da eine Dictionary-Zuweisung im Durchschnitt O(1) Zeit benötigt, beträgt die durchschnittliche Laufzeit O(m). Das gilt für den Durchschnittsfall; Kollisionen können einzelne Zuweisungen verlangsamen. Das Ergebnis-Dictionary enthält höchstens m unterschiedliche Schlüssel und benötigt daher O(m) zusätzlichen Speicherplatz. Der zip()-Iterator selbst benötigt konstanten zusätzlichen Speicherplatz. Enthält das Dictionary bereits d Einträge, bleiben diese erhalten, sofern kein zugeordnetes Schlüssel-Wert-Paar ihren Wert ersetzt; die endgültige Größe beträgt höchstens d + m.