Heim  >  Artikel  >  Backend-Entwicklung  >  Python-Programmierung: Detaillierte Erläuterung der Unterklassen und Anwendungen des integrierten Wörterbuchs (dict) (alles an einem Ort)

Python-Programmierung: Detaillierte Erläuterung der Unterklassen und Anwendungen des integrierten Wörterbuchs (dict) (alles an einem Ort)

WBOY
WBOYnach vorne
2023-04-12 09:04:101324Durchsuche

Vorwort

In diesem Artikel werden hauptsächlich die Anwendungsszenarien und Verwendungsbeispiele mehrerer integrierter Erweiterungsunterklassen der Wörterbuchklasse (dict) im Python-Sammlungsmodul vorgestellt. Er wird auch mit dem Code kombiniert, sodass Sie diese Unterklassen direkt beherrschen können im Zusammenhang mit Diktat auf „kurze und schnelle Weise“ Klassen – OrderedDict, defaultdict, userDict.

OrderedDict

Das geordnete Wörterbuch (OrderedDict) im Python-Sammlungsmodul ähnelt einem normalen Wörterbuch, verfügt jedoch über einige zusätzliche Funktionen im Zusammenhang mit Sortiervorgängen. OrderedDict merkt sich die Reihenfolge, in der Schlüssel eingefügt wurden. Sie verlieren jetzt an Bedeutung, da die integrierte Klasse „dict“ die Fähigkeit erlangt hat, sich die Einfügereihenfolge zu merken (dieses neue Verhalten wurde in Python 3.7 garantiert, daher scheint „OrderedDict“ jetzt weniger wichtig zu sein). Allgemeines Format zum Erstellen eines geordneten Wörterbuchs:

import collections
ordDict = collections.OrderedDict([items]):

oder

from collections import OrderedDict
ordDict = OrderedDict([items]):

Dadurch wird eine Instanz des OrderedDict-Objekts der Dict-Unterklasse erstellt und zurückgegeben, das über Methoden speziell zum Neuanordnen der Wörterbuchreihenfolge verfügt. In diesem Artikel werden diese Methoden kurz vorgestellt.

1) popitem(last=True):

Die Methode popitem() des geordneten Wörterbuchs gibt ein (Schlüssel-Wert-)Paar zurück und löscht es. Wenn last „True“ ist, wird das entsprechende Schlüssel-Wert-Paar im LIFO-Modus (Last In, First Out) zurückgegeben. Andernfalls wird es in der FIFO-Reihenfolge (First In, First Out) zurückgegeben.

2) move_to_end(key, last=True):

Bestehende Schlüssel an jedes Ende des geordneten Wörterbuchs verschieben. Wenn last „True“ ist (Standardeinstellung), wird das Element nach rechts verschoben; wenn last „False“ ist, wird es an den Anfang verschoben. Ein KeyError wird ausgelöst, wenn der Schlüssel nicht vorhanden ist.

Bitte sehen Sie sich den Code an:

Python-Programmierung: Detaillierte Erläuterung der Unterklassen und Anwendungen des integrierten Wörterbuchs (dict) (alles an einem Ort)

Angenommen, wir löschen den gleichen Schlüssel und fügen ihn erneut in OrderedDict ein. Dieser Schlüssel wird am Ende eingefügt, um die Einfügereihenfolge der Schlüssel beizubehalten. Ein Beispiel lautet wie folgt:

Python-Programmierung: Detaillierte Erläuterung der Unterklassen und Anwendungen des integrierten Wörterbuchs (dict) (alles an einem Ort)

Das laufende Ergebnis lautet wie folgt:

删除前的OrderedDict:
x X
y Y
z Z
插入后的OrderedDict:
y Y
z Z
x X

UserDict

Die UserDict-Klasse wird als Wrapper für Pythons integrierte Wörterbuchobjekte (dict) verwendet. Die Notwendigkeit dieser Klasse wurde teilweise durch die Möglichkeit ersetzt, direkt von dict eine Unterklasse zu erstellen. Diese Klasse ist jedoch einfacher zu verwenden, da auf das zugrunde liegende Wörterbuch als Attribut zugegriffen werden kann. Verwenden Sie UserDict, wenn Sie Ihr eigenes Wörterbuch mit einigen geänderten oder neuen Funktionen erstellen möchten. Das Verwendungsformat lautet wie folgt:

import collections
userDict = collections.UserDict([initialdata])

oder

import collections
userDict = collections.UserDict([initialdata])

Bei dieser Art von simuliertem Wörterbuch wird der Inhalt seiner Instanz in einem regulären Wörterbuch gespeichert, auf das über das Datenattribut der UserDict-Instanz zugegriffen werden kann. Wenn Initialdaten bereitgestellt werden, wird der Dateninhalt damit initialisiert. Beachten Sie, dass die Instanz selbst keinen separaten (nicht exklusiven) Verweis auf Initialdaten behält, sodass sie für andere Zwecke verwendet werden kann.

Zusätzlich zur Unterstützung zugeordneter Methoden und Operationen stellen UserDict-Instanzen die folgenden Attribute bereit:

1) Daten

Ein echtes Wörterbuch, das zum Speichern der Inhalte der UserDict-Klasse verwendet wird. Ein Beispiel lautet wie folgt:

Python-Programmierung: Detaillierte Erläuterung der Unterklassen und Anwendungen des integrierten Wörterbuchs (dict) (alles an einem Ort)

Die Ausgabe lautet wie folgt:

{'name': 'Kevin Cui', 'age': 24}

Angenommen, wir möchten ein benutzerdefiniertes Wörterbuchobjekt definieren, das Additionsoperationen (Zusammenführen zweier Wörterbücher) unterstützt. Wenn wir zwei Instanzen eines benutzerdefinierten Wörterbuchs hinzufügen, erwarten wir, dass wir ein neues Wörterbuch erhalten, das alle Elemente in beiden Wörterbüchern enthält. Beachten Sie, dass Sie einen TypeError erhalten, wenn Sie versuchen, etwas zu einem regulären Wörterbuch in Python hinzuzufügen. Lassen Sie es uns mit Hilfe von UserDict implementieren:

Python-Programmierung: Detaillierte Erläuterung der Unterklassen und Anwendungen des integrierten Wörterbuchs (dict) (alles an einem Ort)

Die laufende Ausgabe lautet wie folgt:

{'x': 10, 'y': 20}

Natürlich können Sie auch andere verwandte benutzerdefinierte Vorgänge selbst implementieren.

DefaultDict

Ein häufiges Problem mit der Dictionary-Klasse in Python sind fehlende Schlüssel. Wenn Sie versuchen, auf einen Schlüssel zuzugreifen, der nicht im Wörterbuch vorhanden ist, erhalten Sie eine KeyError-Ausnahme. Wenn Sie also auf ein Element in einem Wörterbuch zugreifen müssen, müssen Sie mit dieser Situation umgehen. Glücklicherweise stellt Python die Klasse DefaultDict bereit. Es wird verwendet, um einen Standardwert für nicht vorhandene Schlüssel bereitzustellen, ohne KeyError auszulösen.

DefaultDict ist eine Unterklasse der integrierten Diktklasse. Es überschreibt eine Methode und fügt eine beschreibbare Instanzvariable hinzu. Der Rest der Funktionalität ist derselbe wie bei dict. Das Verwendungsformat lautet wie folgt:

import colloections
defaultDict = collections.defaultdict(default_factory=None, /[,…])

Der obige Code gibt ein neues wörterbuchähnliches Objekt DefaultDict zurück, das eine Unterklasse der integrierten Diktklasse ist.

Der erste Parameter stellt den Anfangswert für das Attribut „default_factory“ bereit, das standardmäßig „None“ ist. Alle verbleibenden Argumente werden so behandelt, als ob sie an den dict-Konstruktor übergeben würden, einschließlich der Schlüsselwortargumente. Es muss verstanden werden, dass dieser Parameter, wenn er bereitgestellt wird, aufrufbar sein muss.

Zusätzlich zur Unterstützung standardmäßiger Diktoperationen unterstützt das DefaultDict-Objekt auch die folgenden Methodenattribute:

1) __missing__(key):

Wenn das default_factory-Attribut None ist, löst die Verwendung des Schlüssels als Parameter eine KeyError-Ausnahme aus.

Wenn default_factory nicht None ist, liefert der Aufruf ohne Argumente einen Standardwert für den angegebenen Schlüssel, der in das Wörterbuch des Schlüssels eingefügt und zurückgegeben wird.

2)default_factory

DefaultDict对象支持default_factory实例变量。该属性由__missing__()方法使用。如果存在,则从构造函数的第一个参数开始初始化;如果不存在,则初始化为None。

Python-Programmierung: Detaillierte Erläuterung der Unterklassen und Anwendungen des integrierten Wörterbuchs (dict) (alles an einem Ort)

运行程序输出结果为:

[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]

在上述代码中,我们使用列表类型作为default_factory,更易于将包含键值序列对的列表组成字典。当第一次遇到每个键时,它还不在映射中,因此使用default_factory函数自动创建一个条目,该函数返回一个空列表。然后list.append()操作将值连接到新列表。当再次遇到键时,查找正常进行(返回该键的列表),然后list.append()操作将另一个值添加到列表中。这种技术比使用dict.setdefault()的等效技术要简单得多。

我们再看一个示例:

Python-Programmierung: Detaillierte Erläuterung der Unterklassen und Anwendungen des integrierten Wörterbuchs (dict) (alles an einem Ort)

输出结果如下:

[('a', 2), ('c', 1), ('g', 2), ('h', 1), ('i', 1), ('j', 1), ('n', 2)]

在上面代码中,我们将default_factory设置为int。这使得defaultdict用于计数(就像其他语言中的bag或multiset)。

当第一次遇到某个字母时,它就在映射中是不存在的,因此default_factory函数调用int()来提供一个默认的0计数。然后递增操作为每个字母建立计数。

提示:这里传递的int()函数默认返回的是整数0。若想返回任意值,可以自定义个一个基于lambda的常量函数。示例代码如下:

Python-Programmierung: Detaillierte Erläuterung der Unterklassen und Anwendungen des integrierten Wörterbuchs (dict) (alles an einem Ort)

一言以蔽之:使用DefaultDict的好处就是可以避免KeyError异常,并进行一些可能的特定处理。

本文小结

本文主要介绍了Python字典(dict)类相关的几个内置子类的应用。这些直接相关的子类分别是OrderedDict、defaultdict、userDict等内置子类。通过示例代码和关联描述,让你更轻松掌握它们的应用和基本规则。

Das obige ist der detaillierte Inhalt vonPython-Programmierung: Detaillierte Erläuterung der Unterklassen und Anwendungen des integrierten Wörterbuchs (dict) (alles an einem Ort). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:51cto.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen