將 OrderedDict 和 defaultdict 組合為有序預設字典
OrderedDict 和 defaultdict 是 Python 集合中兩個強大的資料結構。 OrderedDict 維護其元素的順序,而 defaultdict 則為缺少的鍵提供預設值。然而,將這些功能組合在一個資料結構中可能具有挑戰性。
使用DefaultOrderedDict 自訂實作
一種可能的解決方案是建立一個名為DefaultOrderedDict 的自訂類,該類別繼承自OrderedDict 並新增預設值功能。以下是一個受 Stack Overflow 答案啟發的實作:
<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>
這個 DefaultOrderedDict 類別結合了 OrderedDict 和 defaultdict 的功能,允許按順序存取元素並為缺少的鍵提供預設值。
以上是如何在 Python 中建立具有預設值的有序字典?的詳細內容。更多資訊請關注PHP中文網其他相關文章!