Python dict für schnelle schlüsselabfragen und defaults
Ein Python dict ordnet hashbare Schlüssel Werten zu, für schnelle Abfragen nach Schlüssel.
Nutze es, wenn jedes Element einen eindeutigen Bezeichner hat und du schnellen Zugriff über diesen Schlüssel brauchst.
dict.get lässt dich einen Default für fehlende Schlüssel angeben und hält Lookups sicher.
Damit sind dicts eine saubere Wahl für schlüsselbasierte Aufgaben.
Python Dict-Beispiel Für Schlüsselabfragen
Ausgabe:
Die Ausgabe erscheint hier...
Ausgabe:
nutzer_2: Noah
nutzer_3: unbekannt
So Funktioniert Dieses Beispiel
- Das dict-Literal erstellt eine Zuordnung von Nutzer-IDs zu Namen; dict-Schlüssel müssen hashbar sein, daher sind Strings eine sichere Wahl.
name_by_id["nutzer_2"]gibt den Wert eines vorhandenen Schlüssels zurück, aber diese Form wirftKeyError, wenn der Schlüssel fehlt.getgibt den angegebenen Default zurück, wenn der Schlüssel fehlt, und verhindert so die Exception für optionale Schlüssel.
Häufige Fehler
Fehler: d[key] verwenden, wenn der Schlüssel optional ist.
Falsch:
status = status_by_order[order_id]
Richtig:
status = status_by_order.get(order_id, "nicht gefunden")
Warum das passiert: d[key] wirft KeyError bei fehlenden Schlüsseln, während get einen Default zurückgibt.
Fehler: Einen nicht hashbaren Schlüssel wie eine Liste verwenden.
Falsch:
bad_key = ["A101"]
status_by_order[bad_key] = "versendet"
Richtig:
good_key = ("A101",)
status_by_order[good_key] = "versendet"
Warum das passiert: dict-Schlüssel müssen hashbar sein, und Listen sind es nicht; Tupel funktionieren, weil sie hashbar sind, wenn ihre Inhalte hashbar sind.
Fehler: Annehmen, dass 1, 1.0 und True unterschiedliche Schlüssel sind.
Falsch:
d = {1: "eins", True: "boolesch"}
Richtig:
d = {1: "eins", 2: "zwei"}
Warum das passiert: Schlüssel, die gleich verglichen werden, verweisen auf denselben Eintrag, sodass spätere Zuweisungen frühere überschreiben.
Python dict vs list: was nutzen?
| Nutze dict, wenn… | Nutze list, wenn… |
|---|---|
| Du einen Schlüssel auf einen Wert abbilden und danach per Schlüssel suchen musst. | Du nur eine geordnete Folge von Elementen oder positionalen Zugriff brauchst. |
| Schlüssel stabile Bezeichner wie IDs, Codes oder Namen sind. | Die Position eines Elements der primäre Zugriffspfad ist. |
Faustregel: Nutze ein dict für schlüsselbasiertes Lookup und eine list für geordneten, indexbasierten Zugriff.
Performance-Überlegungen
Pythons dict-Implementierung ist stark optimiert und funktioniert sehr gut als allgemeines Mapping, weshalb sie für wiederholte Schlüsselabfragen die Standardwahl ist.
Wenn du nur geordneten, indexbasierten Zugriff brauchst, kann eine list einfacher sein, weil dicts nach Schlüsseln und nicht nach Positionen indexieren.
Beim Iterieren über dict-Views solltest du während der Schleife keine Einträge hinzufügen oder löschen; Mutation während der Iteration kann RuntimeError auslösen, also kopiere die Schlüssel zuerst, wenn du sie ändern musst.
Weitere Beispiele
Defaults mit Overrides zusammenführen (Python 3.9+):
defaults = {"versuche": 2, "timeout": 5}
overrides = {"timeout": 10}
config = defaults | overrides
print(config)
| erstellt ein neues dict und bei Schlüsselüberschneidungen gewinnt das rechte dict, was für geschichtete Settings praktisch ist.
Ein dict aus Schlüssel/Wert-Paaren bauen:
language_labels = [("en", "Hello"), ("de", "Hallo")]
labels_by_locale = dict(language_labels)
print(labels_by_locale)
dict() akzeptiert ein Iterable aus Schlüssel/Wert-Paaren, was praktisch ist, wenn deine Daten als Tupel ankommen.
Wann du Python dict verwenden solltest
- Du musst Werte per stabilem Schlüssel abrufen oder aktualisieren, etwa IDs, Codes oder Namen.
- Du möchtest eine vorhersehbare Iterationsreihenfolge, die der Einfügereihenfolge entspricht.
- Du brauchst sichere Defaults für fehlende Schlüssel mit
getoder expliziten Checks. - Du musst Dictionaries mit klaren Prioritätsregeln kombinieren.
- Verwende kein dict, wenn du nur positionalen Zugriff auf geordnete Elemente brauchst; eine list ist dafür einfacher.