Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich in Python ein geordnetes Wörterbuch mit Standardwerten erstellen?
Kombinieren von OrderedDict und defaultdict für ein Ordered Default Dict
OrderedDict und defaultdict sind zwei leistungsstarke Datenstrukturen aus dem Collections-Modul von Python. OrderedDict behält die Reihenfolge seiner Elemente bei, während defaultdict einen Standardwert für fehlende Schlüssel bereitstellt. Die Kombination dieser Funktionen in einer einzigen Datenstruktur kann jedoch eine Herausforderung sein.
Benutzerdefinierte Implementierung mit DefaultOrderedDict
Eine mögliche Lösung besteht darin, eine benutzerdefinierte Klasse namens DefaultOrderedDict zu erstellen, die von erbt OrderedDict und fügt Standardwertfunktionen hinzu. Hier ist eine Implementierung, die von einer Stack Overflow-Antwort inspiriert wurde:
<code class="python">from collections import OrderedDict, Callable class DefaultOrderedDict(OrderedDict): # Source: http://stackoverflow.com/a/6190500/562769 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 # Override __getitem__ to handle missing keys def __getitem__(self, key): try: return OrderedDict.__getitem__(self, key) except KeyError: return self.__missing__(key) # Raise KeyError if no default factory is provided def __missing__(self, key): if self.default_factory is None: raise KeyError(key) self[key] = value = self.default_factory() return value # ... (additional methods and overrides for copy, deepcopy, and repr)</code>
Diese DefaultOrderedDict-Klasse kombiniert die Funktionalität von OrderedDict und defaultdict, ermöglicht geordneten Zugriff auf Elemente und stellt einen Standardwert für fehlende Schlüssel bereit.
Das obige ist der detaillierte Inhalt vonWie kann ich in Python ein geordnetes Wörterbuch mit Standardwerten erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!