In diesem Lernprogramm erfahren Sie, wie Sie defaultdict aus dem Sammlungsmodul von Python verwenden, um KeyErrors besser zu behandeln, wenn Sie mit Python-Wörterbüchern arbeiten.
In Python ist ein Wörterbuch eine leistungsstarke integrierte Datenstruktur, die Daten in Schlüssel-Wert-Paaren speichert. Sie verwenden die Tasten, um auf das Wörterbuch zuzugreifen und auf die Werte zuzugreifen.
Wenn Sie jedoch mehrere Wörterbücher in Ihrem Python-Skript haben, die während der Codeausführung geändert werden, treten häufig KeyErrors auf. Und es gibt verschiedene Möglichkeiten, wie Sie damit umgehen können.
In diesem Tutorial lernen Sie:
- Was KeyErrors sind und warum sie auftreten
- Umgang mit KeyErrors
- So verwenden Sie Pythons defaultdict, eine Unterklasse, die von der integrierten dict-Klasse erbt, um fehlende Schlüssel besser zu handhaben
Lass uns anfangen!
Inhaltsverzeichnis
Was sind KeyErrors in Python?
Beim Definieren eines Python-Wörterbuchs sollten Sie Folgendes beachten:
- Die Schlüssel sollten einzigartig sein – ohne Wiederholung.
- Wenn Sie eine vorhandene Iterable als Schlüssel eines Wörterbuchs verwenden, sollten Sie die Verwendung einer unveränderlichen Sammlung wie eines Tupels bevorzugen.
Ein Schlüssel ist also nur gültig, wenn er im Wörterbuch vorhanden ist; andernfalls führt es zu KeyErrors.
Betrachten Sie das folgende Dictionary, books_authors, in dem die Schlüssel die Namen der Bücher und die Werte die Namen der Autoren sind.
Sie können zusammen mit diesem Tutorial in einer Python-REPL codieren.
books_authors = { 'Deep Work':'Cal Newport', 'Hyperfocus':'Chris Bailey', 'Pivot':'Jenny Blake', 'The Happiness Equation':'Neil Pasricha' }
Mit dem Schlüssel (Name des Buches) können Sie auf den Namen des Autors zugreifen.
books_authors['Hyperfocus'] 'Chris Bailey'
Um auf alle Schlüssel-Wert-Paare im Wörterbuch zuzugreifen, können Sie die Methode items() für das Wörterbuchobjekt aufrufen, wie unten gezeigt:
for book,author in books_authors.items(): print(f"'{book}' by {author}")
'Deep Work' by Cal Newport 'Hyperfocus' by Chris Bailey 'Pivot' by Jenny Blake 'The Happiness Equation' by Neil Pasricha
Wenn Sie versuchen, auf den Wert eines Schlüssels zuzugreifen, der nicht im Wörterbuch vorhanden ist, löst der Python-Interpreter einen KeyError aus. Wir stoßen auf KeyError, wenn wir versuchen, auf den Wert von Schlüsseln zuzugreifen, die nicht existieren, nämlich „Grit“ und „nicht vorhandener 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['non-existent-key']
--------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-7-a3efd56f69e5> in <module> ----> 1 books_authors['non-existent-key'] KeyError: 'non-existent-key'
Wie gehen Sie also mit KeyErrors in Python um?
Es gibt einige Möglichkeiten, dies zu tun, und wir werden sie im nächsten Abschnitt kennenlernen.
Umgang mit KeyErrors in Python
Lassen Sie uns lernen, wie man mit KeyErrors umgeht:
- If-else-Bedingungsanweisungen
- Try-außer-Blöcke
- Die Dictionary-Methode .get()
#1. Verwenden von If-Else-Bedingungsanweisungen
Eine der einfachsten Möglichkeiten, KeyErrors in Python zu handhaben, ist die Verwendung der if-else-Bedingungsanweisungen.
In Python haben if-else-Anweisungen die folgende allgemeine Syntax:
if condition: # do this else: # do something else
- Wenn die Bedingung wahr ist, werden die Anweisungen im if-Text ausgeführt, und
- Wenn die Bedingung False ist, werden die Anweisungen im Else-Body ausgeführt.
In diesem Beispiel soll geprüft werden, ob der Schlüssel im Wörterbuch vorhanden ist.
Wenn der Schlüssel im Wörterbuch vorhanden ist, gibt der in-Operator True zurück, und wenn body ausgeführt wird, wird der entsprechende Wert ausgegeben.
key = 'The Happiness Equation' if key in books_authors: print(books_authors[key]) else: print('Sorry, this key does not exist!') # Output # Neil Pasricha
Wenn der Schlüssel nicht im Wörterbuch vorhanden ist, gibt der in-Operator False zurück und der else-Body wird ausgeführt. Es druckt eine Meldung aus, dass der Schlüssel nicht vorhanden ist.
key = 'non-existent-key' if key in books_authors: print(books_authors[key]) else: print('Sorry, this key does not exist!') # Output # Sorry, this key does not exist!
#2. Verwenden von Try-Except-Anweisungen
Eine weitere gängige Methode zur Behandlung von KeyError ist die Verwendung der try-except-Anweisungen in Python.
Lesen Sie den folgenden Codeblock durch:
key = 'non-existent-key' try: print(books_authors[key]) except KeyError: print('Sorry, this key does not exist!')
- Der try-Block versucht, den Wert abzurufen, der dem bereitgestellten Schlüssel entspricht.
- Wenn der Schlüssel nicht vorhanden ist, löst der Interpreter einen KeyError aus, der als Ausnahme innerhalb des Except-Blocks behandelt wird.
#3. Verwenden der .get()-Methode
In Python können Sie die integrierte Wörterbuchmethode .get() verwenden, um fehlende Schlüssel zu behandeln.
Die allgemeine Syntax zur Verwendung der Methode get() lautet dict.get(key,default_value), wobei dict ein gültiges Dictionary-Objekt in Python ist.
– Wenn der Schlüssel im Wörterbuch vorhanden ist, gibt die Methode get() den 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 durchlaufen die Schlüsselliste, um die entsprechenden Werte aus dem Wörterbuch books_authors abzurufen.
Hier haben wir die .get()-Methode mit „Does not exist“ als Standardwert verwendet.
keys = ['Grit','Hyperfocus','Make Time','Deep Work'] for key in keys: print(books_authors.get(key,'Does not exist'))
Im obigen Code:
- Für Schlüssel, die im Wörterbuch books_authors vorhanden sind, gibt die Methode .get() die entsprechenden Werte zurück.
- Wenn die Schlüssel nicht existieren, in diesem Fall „Grit“ und „Make Time“, gibt die .get()-Methode den Standardwert „Does not exist“ zurück.
# Output Does not exist Chris Bailey Does not exist Cal Newport
Alle oben genannten Methoden helfen uns bei der Behandlung von Schlüsselfehlern. Sie sind jedoch ausführlich und erfordern, dass wir die fehlenden Schlüssel explizit behandeln. Sie können diesen Vorgang vereinfachen, indem Sie anstelle eines normalen Wörterbuchs ein defaultdict verwenden.
Defaultdict in Python
Das Defaultdict ist eine Unterklasse der Klasse Dictionary (dict). Es erbt also das Verhalten eines Python-Wörterbuchs. Darüber hinaus werden fehlende Schlüssel nativ behandelt.
Das Defaultdict ist ein Container-Datentyp, der in die Python-Standardbibliothek integriert ist – innerhalb des Sammlungsmoduls.
Sie müssen es also in Ihre Arbeitsumgebung importieren:
from collections import defaultdict
Hier ist die allgemeine Syntax zur Verwendung von defaultdict:
defaultdict(default_factory)
Sie können eine aufrufbare Variable wie int, float oder list als default_factory-Attribut angeben. Wenn Sie keinen Wert für default_factory angeben, wird standardmäßig None verwendet.
Wenn der gesuchte Schlüssel nicht vorhanden ist, wird die Methode __missing__() ausgelöst und leitet den Standardwert von default_factory ab. Es gibt dann diesen Standardwert zurück.
Zusammenfassend:
- In Python gibt ein defaultdict den Standardwert zurück, wenn der Schlüssel nicht vorhanden ist.
- Außerdem wird dieses Schlüssel-Standardwert-Paar zum Wörterbuch hinzugefügt, das Sie dann ändern können.
Beispiele für Python Defaultdict
Als Nächstes programmieren wir einige Beispiele, um zu verstehen, wie Python defaultdict funktioniert.
Defaultdict in Python mit ganzzahligem Standardwert
Importieren Sie zunächst defaultdict aus dem Sammlungsmodul.
from collections import defaultdict import random
Lassen Sie uns einen Standardpreis erstellen.
prices = defaultdict(int)
Wir füllen nun das Preiswörterbuch mit den Artikeln der Obstliste als Schlüssel. Und wir nehmen zufällig Werte aus der Preisliste, um die Werte zu erhalten.
price_list = [10,23,12,19,5] fruits = ['apple','strawberry','pomegranate','blueberry'] for fruit in fruits: prices[fruit] = random.choice(price_list)
Werfen wir einen Blick auf die Schlüssel-Wert-Paare im Preis-Defaultdict.
print(prices.items())
dict_items([('apple', 12), ('blueberry', 19), ('pomegranate', 5), ('strawberry', 10)])
Wie bei einem normalen Python-Wörterbuch können Sie mit den Schlüsseln auf die Werte des Preis-Defaultdict zugreifen:
prices['apple'] # 23
Lassen Sie uns nun versuchen, auf den Preis einer Frucht zuzugreifen, die nicht vorhanden ist, sagen wir „Orange“. Wir sehen, dass es den Standardwert von Null zurückgibt.
prices['orange'] # 0
Wenn wir das Wörterbuch ausdrucken, sehen wir, dass ein neuer Schlüssel „Orange“ mit dem standardmäßigen ganzzahligen Wert Null hinzugefügt wurde.
print(prices.items())
dict_items([('apple', 12), ('blueberry', 19), ('pomegranate', 5), ('strawberry', 10), ('orange', 0)])
Defaultdict in Python mit List als Standardwert
Lassen Sie uns students_majors als defaultdict von Listen definieren. Die Namen der Majors sind die Schlüssel. Und die Werte sind die Listen der Studenten, die jedes der Hauptfächer belegen, z. B. Mathematik, Wirtschaftswissenschaften, Informatik und mehr.
from collections import defaultdict students_majors = defaultdict(list)
Wenn wir versuchen, auf die Studentenliste zuzugreifen, die ‚Economics‘ entspricht, gibt defaultdict eine leere Liste zurück; keine Tastenfehler!
students_majors['Economics'] # []
Wir haben jetzt eine leere Liste, die dem Hauptfach „Wirtschaft“ zugeordnet ist. Wir können dieser Liste nun Elemente hinzufügen, indem wir die Listenmethode .append() verwenden.
students_majors['Economics'].append('Alex')
Im Standardwörterbuch students_majors wurde ein Eintrag für „Economics“ erstellt.
print(students_majors)
defaultdict(<class 'list'>, {'Economics': ['Alex']})
Sie können der Liste weitere Studenten hinzufügen, die dem Hauptfach Wirtschaftswissenschaften zugeordnet sind, ein neues Hauptfach hinzufügen und vieles mehr!
students_majors['Economics'].append('Bob') students_majors['Math'].append('Laura') print(students_majors)
defaultdict(<class 'list'>, {'Economics': ['Alex', 'Bob'], 'Math': ['Laura']})
Fazit
Ich hoffe, dieses Tutorial hat Ihnen geholfen zu verstehen, wie und wann Sie defaultdict in Python verwenden sollten. Nachdem Sie die Codebeispiele in diesem Lernprogramm ausgeführt haben, können Sie bei Bedarf versuchen, defaultdict als bevorzugte Datenstruktur in Ihren Projekten zu verwenden.
Hier ist eine Zusammenfassung dessen, was Sie in diesem Tutorial gelernt haben.
- Bei der Arbeit mit einem Python-Wörterbuch werden Sie häufig auf KeyErrors stoßen.
- Um solche KeyErrors zu behandeln, können Sie einige ausführliche Methoden verwenden. Sie können bedingte Anweisungen, try-außer-Blöcke oder die Methode .get() verwenden. Aber der defaultdict-Datentyp im collections-Modul kann diese KeyError-Behandlung vereinfachen.
- Sie können defaultdict(default_factory) verwenden, wobei default_factory ein gültiges Callable ist.
- Wenn der Schlüssel nicht im defaultdict vorhanden ist, werden der Standardwert (abgeleitet von default_factory) und der Schlüssel zum defaultdict hinzugefügt.
Sehen Sie sich als Nächstes das Tutorial zur Python-Kartenfunktion an.