Ein Dictionary ist eine Nachschlagetabelle
Listen werden per Position indiziert. Dictionaries per Schlüssel — meist ein String oder eine Zahl —, und jeder Schlüssel zeigt auf einen Wert. Diese eine Verschiebung schaltet eine riesige Programmklasse frei: Inventare, Konfigurationen, JSON-Payloads, Nutzerprofile, Caches.
Schlüssel und Werte können fast alles sein. Schlüssel müssen hashbar sein (also: Zahlen, Strings, Tupel; keine Listen oder anderen Dicts). Werte haben keine Einschränkung — ein Dict kann alles enthalten, auch andere Dicts oder Listen.
Dictionaries erzeugen
Mehrere Wege, jeder hat seinen Platz:
Werte lesen
Zwei Wege, und die Wahl zählt:
Wähle nach Absicht:
- Nimm
[], wenn der Schlüssel da sein muss. Fehlt er, ist das ein Bug und du willst den lauten Fehler. - Nimm
.get(), wenn „nicht vorhanden“ ein gültiger Fall ist. So schreibst du Defaults ohne try/except.
Hinzufügen, Aktualisieren, Löschen
Eine Zuweisung an einen Schlüssel erzeugt ihn entweder oder aktualisiert ihn:
update() führt ein anderes Dict oder eine Iterable aus Paaren zusammen:
Gemeinsame Schlüssel in overrides überschreiben die in settings.
Auf einen Schlüssel prüfen
in prüft die Schlüssel, nicht die Werte:
Willst du gezielt auf Werte prüfen, nimm user.values():
Wie man ein Dictionary iteriert
Du hast drei Sichten zum Durchlaufen:
Zu .items() greifst du meistens — es gibt dir das Paar, entpackt, einsatzbereit.
Die Iterationsreihenfolge in modernem Python (3.7+) entspricht der Einfügereihenfolge. Ein Dict ist kein „Zaubersack“ — fügst du a, dann b, dann c hinzu, liefert die Iteration sie in dieser Reihenfolge. Das ist eine Sprachgarantie, auf die du dich verlassen kannst.
Wie man ein Dictionary sortiert
Dictionaries behalten die Einfügereihenfolge bei, also bedeutet „ein Dict sortieren“ in Wirklichkeit, ein neues Dict zu bauen, dessen Schlüssel in der gewünschten Reihenfolge eingefügt sind:
sorted() liefert eine Liste von Paaren; diese in dict(...) zu wickeln baut ein Dictionary in der neuen Reihenfolge. Brauchst du nur die sortierten Paare (kein Dict), lass das äußere dict() weg.
Wie man zwei Dictionaries zusammenführt
Python 3.9+ gibt dir den Operator |:
Werte aus dem rechten Dict gewinnen bei Schlüsselkollisionen. .update() ist das In-place-Äquivalent. Auf älteren Python-Versionen: {**defaults, **overrides}.
Das setdefault-Muster
Ein häufiger Bedarf: „wenn der Schlüssel da ist, nutz seinen Wert; wenn nicht, setz einen Default und nutz den“.
Oder, besser, nimm collections.Counter:
Counter ist eine Dict-Unterklasse, die standardmäßig zählt. Sie ist die richtige Wahl, sobald du Vorkommen zählst.
Dict-Comprehensions
Parallel zu List Comprehensions, aber um Dicts zu bauen:
Dieselben Regeln wie bei List Comprehensions, nur mit key: value zwischen den Klammern.
Dict als JSON-Zwilling
Python-Dicts entsprechen fast exakt JSON-Objekten. Die Umwandlung ist ein einziger Aufruf:
Deshalb tauchen Dicts in der Web-Entwicklung überall auf — deine API-Anfragen und -Antworten sind im Grunde Dict-Manipulation mit etwas Netzwerk dazwischen.
Ein praktisches Beispiel
Ein kleines konfigurationsartiges Programm, das ein Nutzerprofil verwaltet:
Verschachtelte Dicts, veränderbare Werte, .get() mit Default — das Basis-Werkzeugset für alle datensatzförmigen Daten.
Weiter
Listen, Tupel, Sets, Dicts. Mit diesen vier Sammlungen im Gepäck kannst du fast jede Datenstruktur modellieren, der du am Anfang begegnest. Als Nächstes lernen wir die List Comprehension — Pythons kompakte Art, eine Sammlung in eine andere zu transformieren.
Häufig gestellte Fragen
Was ist ein Dictionary in Python?
Ein Dictionary ist eine Sammlung von Schlüssel-Wert-Paaren. Du schlägst einen Wert per Schlüssel nach — prices['apple'] statt prices[0]. Dictionaries sind schnell zu lesen und zu schreiben, Schlüssel müssen eindeutig sein, und in modernem Python behalten sie die Einfügereihenfolge.
Wie füge ich einem Python-Dictionary einen Schlüssel hinzu?
Weis ihm zu: my_dict['new_key'] = 'new value'. Existiert der Schlüssel schon, wird der Wert überschrieben. Wenn nicht, wird er hinzugefügt. Es gibt keinen Unterschied zwischen „Einfügen“ und „Aktualisieren“ — es ist dieselbe Syntax.
Was ist der Unterschied zwischen dict[key] und dict.get(key)?
dict[key] wirft KeyError, wenn der Schlüssel fehlt. dict.get(key) liefert stattdessen None (oder einen Default, den du angibst). Nimm .get(), wenn fehlende Schlüssel erwartet und normal sind; nimm [key], wenn ein fehlender Schlüssel ein Bug ist.