Verwendung von defaultdict zur besseren Fehlerbehandlung bei Python-Dictionaries
Dieses Tutorial zeigt Ihnen, wie Sie defaultdict aus dem Python-Modul collections nutzen können, um KeyErrors effektiver zu behandeln, wenn Sie mit Dictionaries arbeiten.
Ein Dictionary ist eine vielseitige Datenstruktur in Python, die Daten als Schlüssel-Wert-Paare speichert. Sie verwenden die Schlüssel, um auf die entsprechenden Werte zuzugreifen.
Bei der Arbeit mit mehreren Dictionaries, die während der Programmausführung verändert werden, können jedoch häufig KeyErrors auftreten. Hierfür gibt es verschiedene Lösungsansätze.
In diesem Tutorial lernen Sie:
- Was
KeyErrors sind und warum sie entstehen. - Verschiedene Methoden zur Behandlung von
KeyErrors. - Wie Sie
defaultdict, eine Unterklasse vondict, verwenden, um fehlende Schlüssel eleganter zu verwalten.
Legen wir los!
Was sind KeyErrors in Python?
Beim Erstellen eines Python-Dictionaries gibt es zwei wichtige Aspekte:
- Schlüssel müssen eindeutig sein (keine Duplikate).
- Wenn Sie eine bestehende Iterable als Schlüssel verwenden, sollten Sie unveränderliche Datentypen wie Tupel bevorzugen.
Ein Schlüssel ist nur dann gültig, wenn er im Dictionary vorhanden ist; andernfalls resultiert dies in einem KeyError.
Betrachten Sie das Dictionary books_authors, in dem Buchnamen als Schlüssel und Autorennamen als Werte dienen.
Sie können den Code dieses Tutorials in einer Python-REPL selbst ausprobieren.
books_authors = {
'Deep Work':'Cal Newport',
'Hyperfocus':'Chris Bailey',
'Pivot':'Jenny Blake',
'The Happiness Equation':'Neil Pasricha'
}
Sie können auf den Autorennamen zugreifen, indem Sie den Buchnamen als Schlüssel verwenden:
books_authors['Hyperfocus'] 'Chris Bailey'
Um alle Schlüssel-Wert-Paare auszugeben, können Sie die Methode items() nutzen:
for book,author in books_authors.items():
print(f"'{book}' von {author}")
'Deep Work' von Cal Newport 'Hyperfocus' von Chris Bailey 'Pivot' von Jenny Blake 'The Happiness Equation' von Neil Pasricha
Wenn Sie versuchen, auf einen Wert mit einem nicht existierenden Schlüssel zuzugreifen, löst der Python-Interpreter einen KeyError aus. Dies geschieht zum Beispiel bei den Schlüsseln 'Grit' und 'nicht-existenter-schlüssel'.
books_authors['Grit']
--------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-6-e1a4486f5ced> in <module> ----> 1 books_authors['Grit'] KeyError: 'Grit'
books_authors['nicht-existenter-schlüssel']
--------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-7-a3efd56f69e5> in <module> ----> 1 books_authors['nicht-existenter-schlüssel'] KeyError: 'nicht-existenter-schlüssel'
Wie können Sie also KeyErrors in Python behandeln?
Es gibt mehrere Möglichkeiten, die wir uns im nächsten Abschnitt ansehen werden.
Behandlung von KeyErrors in Python
Lassen Sie uns die verschiedenen Methoden zur Behandlung von KeyErrors kennenlernen:
if-else-Bedingungentry-except-Blöcke- Die
get()-Methode des Dictionaries
#1. Verwendung von if-else-Bedingungen
Eine einfache Methode zur Behandlung von KeyErrors ist die Verwendung von if-else-Bedingungen.
Die allgemeine Syntax einer if-else-Anweisung in Python lautet:
if Bedingung: # tue dies else: # tue etwas anderes
- Wenn die Bedingung wahr ist, werden die Anweisungen im
if-Block ausgeführt. - Wenn die Bedingung falsch ist, werden die Anweisungen im
else-Block ausgeführt.
In diesem Beispiel prüfen wir, ob ein Schlüssel im Dictionary vorhanden ist.
Wenn der Schlüssel vorhanden ist, gibt der in-Operator True zurück, und der entsprechende Wert wird ausgegeben.
key = 'The Happiness Equation'
if key in books_authors:
print(books_authors[key])
else:
print('Entschuldigung, dieser Schlüssel existiert nicht!')
# Ausgabe
# Neil Pasricha
Wenn der Schlüssel nicht vorhanden ist, gibt der in-Operator False zurück, und der else-Block wird ausgeführt. Es wird eine Meldung ausgegeben, dass der Schlüssel nicht existiert.
key = 'nicht-existenter-schlüssel'
if key in books_authors:
print(books_authors[key])
else:
print('Entschuldigung, dieser Schlüssel existiert nicht!')
# Ausgabe
# Entschuldigung, dieser Schlüssel existiert nicht!
#2. Verwendung von try-except-Anweisungen

Eine weitere häufig verwendete Methode zur Behandlung von KeyErrors ist die Verwendung von try-except-Anweisungen.
Betrachten Sie folgenden Codeblock:
key = 'nicht-existenter-schlüssel'
try:
print(books_authors[key])
except KeyError:
print('Entschuldigung, dieser Schlüssel existiert nicht!')
- Der
try-Block versucht, den Wert für den angegebenen Schlüssel abzurufen. - Wenn der Schlüssel nicht vorhanden ist, wird ein
KeyErrorausgelöst, der imexcept-Block abgefangen wird.
#3. Verwendung der get()-Methode
Python bietet die integrierte Dictionary-Methode get(), um fehlende Schlüssel zu handhaben.
Die allgemeine Syntax lautet: dict.get(key, default_value), wobei dict ein gültiges Dictionary-Objekt ist.
- Wenn der Schlüssel existiert, gibt
get()den zugehörigen Wert zurück. - Andernfalls wird der Standardwert zurückgegeben.
In diesem Beispiel ist keys eine Liste von Schlüsseln, auf deren Werte wir zugreifen möchten. Wir iterieren über die Liste, um die Werte aus dem Dictionary books_authors abzurufen.
Hier verwenden wir die get()-Methode mit „Existiert nicht“ als Standardwert.
keys = ['Grit','Hyperfocus','Make Time','Deep Work'] for key in keys: print(books_authors.get(key,'Existiert nicht'))
In diesem Code:
- Für Schlüssel, die in
books_authorsvorhanden sind, gibtget()die zugehörigen Werte zurück. - Für nicht existierende Schlüssel (
'Grit'und'Make Time') gibtget()den Standardwert „Existiert nicht“ zurück.
# Ausgabe
Existiert nicht
Chris Bailey
Existiert nicht
Cal Newport
Alle oben genannten Methoden helfen bei der Behandlung von KeyErrors. Sie sind jedoch ausführlich und erfordern eine explizite Behandlung. Mit defaultdict lässt sich dies einfacher gestalten.
defaultdict in Python

defaultdict ist eine Unterklasse von dict und erbt dessen Verhalten, behandelt aber fehlende Schlüssel auf besondere Weise.
defaultdict ist ein Container-Datentyp in der Python-Standardbibliothek (im Modul collections).
Sie müssen es daher importieren:
from collections import defaultdict
Die allgemeine Syntax lautet:
defaultdict(default_factory)
Sie können ein aufrufbares Objekt (wie int, float oder list) als default_factory angeben. Wenn kein Wert für default_factory angegeben wird, ist dieser standardmäßig None.
Wenn ein gesuchter Schlüssel nicht existiert, wird die Methode __missing__() aufgerufen und der Standardwert aus default_factory abgeleitet und zurückgegeben.
Zusammenfassend:
defaultdictgibt einen Standardwert zurück, wenn ein Schlüssel nicht existiert.- Zudem wird dieses Schlüssel-Standardwert-Paar zum Dictionary hinzugefügt, was Sie später ändern können.
Beispiele für defaultdict

Betrachten wir nun einige Beispiele, um die Funktionsweise von defaultdict zu verstehen.
defaultdict mit ganzzahligem Standardwert
Importieren Sie zuerst defaultdict aus dem collections-Modul.
from collections import defaultdict import random
Erstellen wir ein Dictionary für Preise.
prices = defaultdict(int)
Füllen wir nun das Dictionary mit Obstnamen als Schlüssel und zufälligen Preisen als Werte.
price_list = [10,23,12,19,5] fruits = ['apfel','erdbeere','granatapfel','blaubeere'] for fruit in fruits: prices[fruit] = random.choice(price_list)
Sehen wir uns die Schlüssel-Wert-Paare an.
print(prices.items())
dict_items([('apfel', 12), ('blaubeere', 19), ('granatapfel', 5), ('erdbeere', 10)])
Wie bei normalen Dictionaries können Sie über die Schlüssel auf die Werte zugreifen:
prices['apfel'] # 23
Versuchen wir, den Preis einer nicht existierenden Frucht (z. B. „orange“) abzurufen. Es wird der Standardwert 0 zurückgegeben.
prices['orange'] # 0
Wenn wir das Dictionary ausgeben, sehen wir, dass der neue Schlüssel „orange“ mit dem Standardwert 0 hinzugefügt wurde.
print(prices.items())
dict_items([('apfel', 12), ('blaubeere', 19), ('granatapfel', 5), ('erdbeere', 10), ('orange', 0)])
defaultdict mit Listen als Standardwert
Definieren wir students_majors als defaultdict von Listen. Die Studiengänge sind die Schlüssel, die Werte sind Listen von Studenten.
from collections import defaultdict students_majors = defaultdict(list)
Wenn wir versuchen, auf die Liste der Studierenden in Wirtschaft zuzugreifen, gibt defaultdict eine leere Liste zurück. Kein KeyError!
students_majors['Wirtschaft'] # []
Wir haben nun eine leere Liste für den Studiengang Wirtschaft. Dieser Liste können wir nun Elemente hinzufügen:
students_majors['Wirtschaft'].append('Alex')
Im Dictionary students_majors wurde ein Eintrag für Wirtschaft erstellt:
print(students_majors)
defaultdict(<class 'list'>, {'Wirtschaft': ['Alex']})
Sie können weitere Studenten hinzufügen, neue Studiengänge anlegen und vieles mehr!
students_majors['Wirtschaft'].append('Bob')
students_majors['Mathematik'].append('Laura')
print(students_majors)
defaultdict(<class 'list'>, {'Wirtschaft': ['Alex', 'Bob'], 'Mathematik': ['Laura']})
Fazit
Ich hoffe, dieses Tutorial hat Ihnen geholfen, die Verwendung von defaultdict in Python zu verstehen. Nach dem Durcharbeiten der Codebeispiele sollten Sie defaultdict als bevorzugte Datenstruktur in Ihren Projekten einsetzen.
Zusammenfassend haben Sie Folgendes gelernt:
- Bei der Arbeit mit Dictionaries treten häufig
KeyErrors auf. - Sie können
KeyErrors mit bedingten Anweisungen,try-except-Blöcken oder derget()-Methode behandeln, aberdefaultdictaus dem Modulcollectionsvereinfacht die Handhabung. - Sie verwenden
defaultdict(default_factory), wobeidefault_factoryein gültiges aufrufbares Objekt ist. - Wenn ein Schlüssel in
defaultdictnicht existiert, werden der Standardwert (abgeleitet vondefault_factory) und der Schlüssel zudefaultdicthinzugefügt.
Schauen Sie sich als Nächstes das Tutorial zur Python-Funktion map() an.