Implementieren eines geordneten Standarddikts
Das in Python integrierte Sammlungsmodul stellt sowohl OrderedDict als auch Defaultdict bereit, die jeweils unterschiedliche Funktionen bieten. Ein OrderedDict behält die Einfügereihenfolge seiner Elemente bei, während ein Defaultdict automatisch Standardwerte für fehlende Schlüssel basierend auf einer angegebenen Factory-Funktion generiert.
Die Kraft von beidem kombinieren
Durch die Kombination der Fähigkeiten beider Datenstrukturen kann man ein geordnetes Standarddikt erstellen, das die Reihenfolge seiner Elemente beibehält und fehlende Schlüssel mit Standardwerten initialisiert. Dies kann durch Erweitern der OrderedDict-Klasse erreicht werden.
Benutzerdefinierte Klasse: DefaultOrderedDict
Die folgende benutzerdefinierte Klasse DefaultOrderedDict erbt von OrderedDict und fügt die Funktionalität zur Behandlung fehlender Schlüssel hinzu:
<code class="python">from collections import OrderedDict, Callable class DefaultOrderedDict(OrderedDict): def __init__(self, default_factory=None, *a, **kw): if (default_factory is not None and not isinstance(default_factory, Callable)): raise TypeError('first argument must be callable') OrderedDict.__init__(self, *a, **kw) self.default_factory = default_factory def __getitem__(self, key): try: return OrderedDict.__getitem__(self, key) except KeyError: return self.__missing__(key) def __missing__(self, key): if self.default_factory is None: raise KeyError(key) self[key] = value = self.default_factory() return value</code>
Verwendung
Diese Klasse kann auf die gleiche Weise wie ein reguläres OrderedDict verwendet werden:
<code class="python">ordered_default_dict = DefaultOrderedDict(lambda: 0) ordered_default_dict['key1'] = 1 ordered_default_dict['key2'] = 2</code>
Allerdings, wenn ein Schlüssel vorhanden ist nicht vorhanden, wird der Standardwert aus der Werksfunktion generiert:
<code class="python">print(ordered_default_dict['missing_key']) # Output: 0</code>
Das obige ist der detaillierte Inhalt vonWie erstelle ich ein geordnetes Standarddikt in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!