Verwendung von defaultdict in Python

Zeeshan Afridi 8 Oktober 2023
  1. defaultdict vs. dict in Python
  2. das defaultdict in Python
  3. Nützliche Funktionen des defaultdict in Python
Verwendung von defaultdict in Python

Der heutige Artikel geht auf den Container defaultdict ein und demonstriert seine Verwendung anhand von Codebeispielen.

defaultdict vs. dict in Python

Das defaultdict ist ein Container wie ein Wörterbuch, das zum Collections-Modul gehört. Es ist eine Unterklasse des Wörterbuchs; daher hat es alle Funktionalitäten von Wörterbuch. Der einzige Zweck von defaultdict ist jedoch die Behandlung des KeyError.

# return true if the defaultdict is a subclass of dict (dictionary)
from collections import defaultdict

print(issubclass(defaultdict, dict))

Ausgang:

True

Angenommen, ein Benutzer sucht einen Eintrag im Wörterbuch, und der gesuchte Eintrag existiert nicht. Bei den gewöhnlichen Wörterbüchern wird ein KeyError ausgegeben, was bedeutet, dass der Eintrag nicht existiert. Um dieses Problem zu lösen, präsentierten die Python-Entwickler das Konzept von defaultdict.

Codebeispiel:

# normal dictionary
ord_dict = {"x": 3, "y": 4}

ord_dict["z"]  # --> KeyError

Ausgang:

KeyError: 'z'

Das gewöhnliche Wörterbuch kann mit unbekannten Schlüsseln nicht umgehen und löst KeyError aus, wenn wir nach einem unbekannten Schlüssel suchen, wie im obigen Code gezeigt.

Das Modul defaultdict hingegen funktioniert ähnlich wie Python-Wörterbücher. Dennoch verfügt es über fortschrittliche, hilfreiche und benutzerfreundliche Funktionen und gibt keinen Fehler aus, wenn ein Benutzer nach einem nicht definierten Schlüssel im Wörterbuch sucht.

Stattdessen erstellt es einen Eintrag im Wörterbuch und gibt einen Standardwert für den Schlüssel zurück. Um dieses Konzept zu verstehen, schauen wir uns den praktischen Teil unten an.

Codebeispiel:

from collections import defaultdict

# the default value for the undefined key


def def_val():
    return "The searched Key Not Present"


dic = defaultdict(def_val)

dic["x"] = 3
dic["y"] = 4

# search 'z' in the dictionary 'dic'
print(dic["z"])  # instead of a KeyError, it has returned the default value
print(dic.items())

Ausgang:

The searched Key Not Present
dict_items([('x', 3), ('y', 4), ('z', 'The searched Key Not Present')])

Das defaultdict erstellt alle Elemente, auf die wir versuchen, mit dem Schlüssel zuzugreifen, der im Wörterbuch nicht definiert ist.

Und erstellen Sie ein solches Standard-Element, es ruft das Funktionsobjekt auf, das wir an den Konstruktor des defaultdict übergeben, und um genauer zu sein, das Objekt sollte ein aufrufbares Objekt sein, das Typobjekte und Funktionen enthält.

Im obigen Beispiel werden die Standardelemente mit der Funktion def_val erstellt, die eine Zeichenfolge Der gesuchte Schlüssel nicht vorhanden gegen den undefinierten Schlüssel im Wörterbuch zurückgibt.

das defaultdict in Python

Die default_factory ist das erste Argument für den defaultdict-Konstruktor, der von der __missing__()-Methode verwendet wird, und wenn das Argument des Konstruktors fehlt, wird die default_factory als None initialisiert, was der Fall ist kommt der KeyError.

Und wenn die default_factory mit etwas anderem als None initialisiert wird, wird sie einem gesuchten Schlüssel als Wert zugewiesen, wie in einem Beispiel oben zu sehen ist.

Nützliche Funktionen des defaultdict in Python

Es gibt unzählige Funktionen von dictionary und defaultdict. Wie wir wissen, hat defaultdict Zugriff auf alle Funktionen von dictionary; Dies sind jedoch einige der nützlichsten Funktionen von defaultdict.

defaultdict.clear() in Python

Codebeispiel:

from collections import defaultdict

# the default value for the undefined key


def def_val():
    return "Not Present"


dic = defaultdict(def_val)

dic["x"] = 3
dic["y"] = 4

print(f'Before clearing the dic, values of x = {dic["x"]} and y = {dic["y"]}')
dic.clear()  # dic.clear() -> None. it will remove all items from dic.
print(f'After clearing the dic, values of x = {dic["x"]} and y = {dic["y"]}')

Ausgang:

Before clearing the dic, values of x = 3 and y = 4
After clearing the dic, values of x = Not Present and y = Not Present

Wie wir im obigen Beispiel sehen, haben wir zwei Datenpaare im Wörterbuch dic, wobei x=3 und y=4. Nach der Verwendung der Funktion clear() wurden jedoch Daten entfernt, und die Werte von x und yexistieren nicht mehr, und deshalb erhalten wir Nicht vorhanden gegen x und y.

defaultdict.copy() in Python

Codebeispiel:

from collections import defaultdict

# the default value for the undefined key


def def_val():
    return "Not Present"


dic = defaultdict(def_val)

dic["x"] = 3
dic["y"] = 4

dic_copy = dic.copy()  # dic.copy will give you a shallow copy of dic.

print(f"dic = {dic.items()}")
print(f"dic_copy = {dic_copy.items()}")

Ausgang:

dic = dict_items([('x', 3), ('y', 4)])
dic_copy = dict_items([('x', 3), ('y', 4)])

Die Funktion defaultdict.copy() wird verwendet, um eine flache Kopie des Wörterbuchs in eine andere Variable zu kopieren, die wir entsprechend verwenden können.

defaultdict.default_factory() in Python

Codebeispiel:

from collections import defaultdict

# the default value for the undefined key


def def_val():
    return "Not present"


dic = defaultdict(def_val)

dic["x"] = 3
dic["y"] = 4

print(f"The value of z = {dic['Z']}")
print(
    dic.default_factory()
)  # default_factory returns the default value for defaultdict.

Ausgang:

The value of z = Not present
Not present

Die Funktion default_factory() wird verwendet, um Standardwerte für die Attribute einer definierten Klasse bereitzustellen, und im Allgemeinen sind die Werte von default_factory die Werte, die von einer Funktion zurückgegeben werden.

defaultdict.get(Schlüssel, Standardwert) in Python

Codebeispiel:

from collections import defaultdict

# the default value for the undefined key


def def_val():
    return "Not present"


dic = defaultdict(def_val)

dic["x"] = 3
dic["y"] = 4

# search the value of Z in the dictionary dic; if it exists, return the value; otherwise, display the message
print(dic.get("Z", "Value doesn't exist"))  # default value is None

Ausgang:

Value doesn't exist

Die Funktion defaultdict.get() nimmt zwei Argumente, erstens den Schlüssel und zweitens den Standardwert gegen den Schlüssel, falls der Wert nicht existiert.

Aber das zweite Argument ist optional. Wir können also jede Nachricht oder jeden Wert angeben; andernfalls wird None als Standardwert angezeigt.

Zeeshan Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn