W3docs

Dictionaries durchlaufen

Alle Methoden zum Durchlaufen von Python-Dictionaries: Schlüssel, Werte, items(), Filterung, Comprehensions und sichere Änderungen während der Schleife.

Python-Dictionaries speichern Daten als Schlüssel-Wert-Paare, und es ist häufig erforderlich, sie zu durchlaufen — um jeden Eintrag auszugeben, Daten zu filtern, Werte zu transformieren oder neue Strukturen zu erstellen. Dieses Kapitel behandelt alle gängigen Techniken zum Iterieren über ein Dictionary, erklärt, welche Methode in welcher Situation geeignet ist, und beleuchtet den häufigsten Fehler: ein Dictionary zu ändern, während man es durchläuft.

Wenn Sie neu bei Dictionaries sind, lesen Sie zunächst Python Dictionaries. Zur allgemeinen Schleifensyntax siehe Python For Loops.

Über Schlüssel iterieren

Wenn Sie eine einfache for-Schleife auf ein Dictionary anwenden, iteriert Python standardmäßig über seine Schlüssel.

Über Dictionary-Schlüssel iterieren

person = {"name": "Alice", "age": 30, "city": "Berlin"}

for key in person:
    print(key)

Ausgabe:

name
age
city

Der Aufruf von .keys() ist gleichwertig und macht die Absicht deutlicher:

python— editable, runs on the server

Sobald Sie den Schlüssel haben, können Sie seinen Wert innerhalb der Schleife nachschlagen:

person = {"name": "Alice", "age": 30, "city": "Berlin"}

for key in person:
    print(key, "->", person[key])

Ausgabe:

name -> Alice
age -> 30
city -> Berlin

Wann sollte man .keys() verwenden?

Verwenden Sie die einfache Form for key in d, wenn Sie nur Schlüssel benötigen. Verwenden Sie d.keys() explizit, wenn Sie die Zugehörigkeit testen ("name" in d.keys()) oder die Ansicht an eine andere Funktion übergeben möchten. Für einen einfachen Zugehörigkeitstest ist jedoch if "name" in d schneller.

Über Werte iterieren

Verwenden Sie .values(), wenn Sie nur die Werte benötigen und sich nicht um die Schlüssel kümmern.

Über Dictionary-Werte iterieren

scores = {"math": 92, "science": 87, "english": 95}

for score in scores.values():
    print(score)

Ausgabe:

92
87
95

Ein häufiger Anwendungsfall ist die Berechnung einer Zusammenfassung über alle Werte:

scores = {"math": 92, "science": 87, "english": 95}

total = sum(scores.values())
average = total / len(scores)
print(f"Average score: {average:.1f}")

Ausgabe:

Average score: 91.3

Über Schlüssel-Wert-Paare mit .items() iterieren

.items() gibt jeden Eintrag als (key, value)-Tuple zurück. Sie können das Tuple direkt in zwei Variablen entpacken. Dies ist die vielseitigste Iterationsmethode und die, die Sie am häufigsten verwenden werden.

Über Schlüssel-Wert-Paare iterieren

person = {"name": "Alice", "age": 30, "city": "Berlin"}

for key, value in person.items():
    print(f"{key}: {value}")

Ausgabe:

name: Alice
age: 30
city: Berlin

Filtern beim Durchlaufen

Kombinieren Sie eine for-Schleife mit einer if-Bedingung, um nur die gewünschten Einträge zu verarbeiten.

Nur vorrätige Artikel ausgeben

inventory = {"apples": 5, "bananas": 0, "oranges": 3, "grapes": 0}

print("In stock:")
for item, qty in inventory.items():
    if qty > 0:
        print(f"  {item}: {qty}")

Ausgabe:

In stock:
  apples: 5
  oranges: 3

Dictionary-Einträge sortieren

Python 3.7+ garantiert, dass Dictionaries die Einfügungsreihenfolge beibehalten. Wenn Sie eine andere Reihenfolge benötigen, sortieren Sie die Schlüssel oder Einträge vor dem Durchlaufen — das Dictionary selbst wird dabei nicht verändert.

Nach Schlüssel sortieren (alphabetisch)

book = {"banana": 7, "apple": 3, "cherry": 12}

for fruit in sorted(book):
    print(f"{fruit}: {book[fruit]}")

Ausgabe:

apple: 3
banana: 7
cherry: 12

Nach Wert sortieren

Übergeben Sie eine key-Funktion an sorted(), um das Sortierkriterium zu steuern.

book = {"banana": 7, "apple": 3, "cherry": 12}

for fruit, count in sorted(book.items(), key=lambda item: item[1], reverse=True):
    print(f"{fruit}: {count}")

Ausgabe:

cherry: 12
banana: 7
apple: 3

enumerate() beim Durchlaufen verwenden

Umschließen Sie .items() mit enumerate(), um neben jedem Schlüssel-Wert-Paar einen laufenden Index zu erhalten.

colors = {"red": "#FF0000", "green": "#00FF00", "blue": "#0000FF"}

for index, (name, hex_code) in enumerate(colors.items()):
    print(f"{index}: {name} -> {hex_code}")

Ausgabe:

0: red -> #FF0000
1: green -> #00FF00
2: blue -> #0000FF

Dictionary-Comprehensions

Eine Dictionary-Comprehension erstellt in einem einzigen Ausdruck ein neues Dictionary aus einem bestehenden. Die Syntax ähnelt List-Comprehensions, verwendet jedoch geschweifte Klammern und einen Doppelpunkt zwischen Schlüssel und Wert.

Auf jeden Preis 10 % Rabatt anwenden

prices = {"apple": 1.20, "banana": 0.50, "orange": 0.80}

discounted = {item: round(price * 0.9, 2) for item, price in prices.items()}
print(discounted)

Ausgabe:

{'apple': 1.08, 'banana': 0.45, 'orange': 0.72}

Am Ende kann eine Filterbedingung hinzugefügt werden:

Nur Schüler mit 90 Punkten oder mehr behalten

students = {
    "Alice": {"grade": "A", "score": 95},
    "Bob":   {"grade": "B", "score": 82},
    "Carol": {"grade": "A", "score": 91},
}

top_students = {name: info for name, info in students.items() if info["score"] >= 90}
print(top_students)

Ausgabe:

{'Alice': {'grade': 'A', 'score': 95}, 'Carol': {'grade': 'A', 'score': 91}}

Über verschachtelte Dictionaries iterieren

Wenn Werte selbst Dictionaries sind (siehe Nested Dictionaries), greifen Sie mit einem zweiten Index oder einer zweiten Schleife auf die inneren Einträge zu.

Alle Felder für jeden Schüler ausgeben

students = {
    "Alice": {"grade": "A", "score": 95},
    "Bob":   {"grade": "B", "score": 82},
    "Carol": {"grade": "A", "score": 91},
}

for name, info in students.items():
    print(f"{name}: grade={info['grade']}, score={info['score']}")

Ausgabe:

Alice: grade=A, score=95
Bob: grade=B, score=82
Carol: grade=A, score=91

Ein Dictionary beim Durchlaufen ändern — die wichtigste Falle

Sie können einem Dictionary während der Iteration keine Schlüssel hinzufügen oder entfernen. Python wirft sofort einen RuntimeError:

d = {"a": 1, "b": 2, "c": 3}

# This raises RuntimeError: dictionary changed size during iteration
for key in d:
    if d[key] == 2:
        del d[key]

Das sichere Muster besteht darin, zuerst die zu entfernenden Schlüssel zu sammeln und sie erst nach der Schleife zu löschen:

Sicheres Löschen nach dem Durchlaufen

config = {"debug": True, "verbose": True, "timeout": 30}

keys_to_remove = [k for k, v in config.items() if v is True]
for k in keys_to_remove:
    del config[k]

print(config)

Ausgabe:

{'timeout': 30}

Dasselbe Prinzip gilt für das Hinzufügen von Schlüsseln: Sammeln Sie die neuen Paare und aktualisieren Sie das Dictionary anschließend mit update() oder einer direkten Zuweisung nach der Schleife.

Die richtige Methode wählen

ZielMethode
Nur über Schlüssel iterierenfor key in d oder for key in d.keys()
Nur über Werte iterierenfor value in d.values()
Über beides iterierenfor key, value in d.items()
Ein neues Dictionary erstellenDictionary-Comprehension
Einträge sortierensorted(d) oder sorted(d.items(), key=...)
Index + Schlüssel-Wertenumerate(d.items())

Für den vollständigen Satz an Dictionary-Operationen siehe Python Dictionary Methods und Copy Dictionaries.

Übung

Übung
Which of the following ways can be used to loop through a dictionary in Python, as learned from the webpage at W3docs?
Which of the following ways can be used to loop through a dictionary in Python, as learned from the webpage at W3docs?
Was this page helpful?