`defaultdict` in Python verstehen
Daniel Hayes
Full-Stack Engineer · Leapcell

Key Takeaways
defaultdict
initialisiert fehlende Schlüssel automatisch mit einem Standardwert.- Es vereinfacht häufige Aufgaben wie das Zählen und Gruppieren in Dictionaries.
- Eine Factory-Funktion muss bereitgestellt werden, um Standardwerte zu definieren.
Bei der Arbeit mit Dictionaries in Python ist ein häufiges Problem für Entwickler der Umgang mit fehlenden Schlüsseln. Der Zugriff auf einen Schlüssel, der in einem Standard-Dictionary (dict
) nicht existiert, löst einen KeyError
aus. Hier kommt collections.defaultdict
ins Spiel – eine leistungsstarke Alternative, die Dictionary-Operationen vereinfacht, indem sie Standardwerte für nicht existierende Schlüssel bereitstellt.
Was ist defaultdict
?
defaultdict
ist eine Unterklasse der eingebauten Klasse dict
. Sie überschreibt eine Methode — __missing__
—, um einen Standardwert für fehlende Schlüssel zurückzugeben, anstatt einen Fehler auszulösen. Sie ist Teil des Python-Moduls collections
und muss vor der Verwendung importiert werden.
from collections import defaultdict
Grundlegende Verwendung
Um ein defaultdict
zu erstellen, müssen Sie eine Factory-Funktion bereitstellen – ein Callable, das den Standardwert zurückgibt, wenn auf einen fehlenden Schlüssel zugegriffen wird.
from collections import defaultdict # Ein defaultdict mit int gibt 0 für fehlende Schlüssel zurück counts = defaultdict(int) counts['apple'] += 1 print(counts) # Ausgabe: defaultdict(<class 'int'>, {'apple': 1})
Im obigen Beispiel gibt int()
0
zurück, sodass der erste Zugriff auf 'apple'
keinen KeyError
auslöst – stattdessen wird er mit 0
initialisiert und dann 1
hinzugefügt.
Häufige Anwendungsfälle
Elemente zählen
defaultdict(int)
wird häufig verwendet, um das Vorkommen von Elementen zu zählen:
words = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple'] counter = defaultdict(int) for word in words: counter[word] += 1 print(counter) # Ausgabe: defaultdict(<class 'int'>, {'apple': 3, 'banana': 2, 'orange': 1})
Daten gruppieren
defaultdict(list)
ist nützlich, um Elemente in Listen zu gruppieren:
from collections import defaultdict students = [ ('Math', 'Alice'), ('Math', 'Bob'), ('English', 'Alice'), ('Science', 'Charlie') ] grouped = defaultdict(list) for subject, name in students: grouped[subject].append(name) print(grouped) # Ausgabe: defaultdict(<class 'list'>, {'Math': ['Alice', 'Bob'], 'English': ['Alice'], 'Science': ['Charlie']})
Factory-Funktionen
Die Factory kann jedes Callable sein – nicht nur Built-ins wie int
oder list
. Sie können beispielsweise eine Lambda- oder benutzerdefinierte Funktion verwenden:
default_str = defaultdict(lambda: 'N/A') print(default_str['unknown']) # Ausgabe: N/A
Vergleich mit dict.get()
und setdefault()
Während Methoden wie dict.get(key, default)
oder dict.setdefault(key, default)
KeyError
vermeiden können, ist defaultdict
sauberer und effizienter, wenn Sie wiederholt Standardwerte initialisieren müssen.
Vorbehalte
- Alle fehlenden Schlüssel werden dem Dictionary hinzugefügt, sobald auf sie zugegriffen wird, auch wenn nur zum Lesen.
- Wenn Ihre Standard-Factory teure Operationen beinhaltet, verwenden Sie sie mit Vorsicht – oder erwägen Sie eine Lazy Initialization.
Fazit
defaultdict
ist ein sehr nützliches Werkzeug in Python, um die Verwendung von Dictionaries zu vereinfachen, wenn es um Standardwerte geht. Egal, ob Sie zählen, gruppieren oder einfach nur Boilerplate-Initialisierungscode vermeiden möchten, defaultdict
kann Ihren Code sauberer und effizienter machen.
Für komplexere Anwendungsfälle oder tief verschachtelte Dictionaries kann defaultdict
auch selbst verschachtelt werden:
tree = defaultdict(lambda: defaultdict(list)) tree['fruits']['red'].append('apple') print(tree)
Erkunden Sie es – und es wird vielleicht eines Ihrer Lieblingswerkzeuge in Python.
FAQs
Der Schlüssel wird erstellt und mithilfe der Factory-Funktion initialisiert.
defaultdict
vermeidet sich wiederholenden Code, indem es Standardwerte automatisch initialisiert.
Ja, defaultdict
kann verschachtelt werden, um Strukturen wie Bäume oder gruppierte Zuordnungen zu erstellen.
Wir sind Leapcell, Ihre erste Wahl für das Hosten von Python-Projekten.
Leapcell ist die Next-Gen Serverless Plattform für Web Hosting, Async Tasks und Redis:
Multi-Language Support
- Entwickeln Sie mit Node.js, Python, Go oder Rust.
Stellen Sie unbegrenzt Projekte kostenlos bereit
- zahlen Sie nur für die Nutzung — keine Anfragen, keine Gebühren.
Unschlagbare Kosteneffizienz
- Pay-as-you-go ohne Leerlaufgebühren.
- Beispiel: 25 US-Dollar unterstützen 6,94 Millionen Anfragen bei einer durchschnittlichen Antwortzeit von 60 ms.
Optimierte Entwicklererfahrung
- Intuitive Benutzeroberfläche für mühelose Einrichtung.
- Vollständig automatisierte CI/CD-Pipelines und GitOps-Integration.
- Echtzeitmetriken und -protokollierung für umsetzbare Erkenntnisse.
Mühelose Skalierbarkeit und hohe Leistung
- Automatische Skalierung zur einfachen Bewältigung hoher Parallelität.
- Kein operativer Aufwand — konzentrieren Sie sich einfach auf das Bauen.
Erfahren Sie mehr in der Dokumentation!
Folgen Sie uns auf X: @LeapcellHQ