首頁  >  文章  >  後端開發  >  如何在 Python 中實作有序的 defaultdict 來維護鍵順序並分配預設值?

如何在 Python 中實作有序的 defaultdict 來維護鍵順序並分配預設值?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-28 09:33:02507瀏覽

How do you implement an ordered defaultdict in Python to maintain key order and assign default values?

實作有序預設字典

人們可能希望將Python Collections 模組中的OrderedDict() 和defaultdict() 的功能合併到創建一個有序的預設字典。這種組合將允許維護一個字典,其中鍵是有序的,並且在存取不存在的鍵時分配預設值。

為了實現這一點,我們可以利用 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

    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

    # Override necessary methods for pickling
    def __reduce__(self):
        if self.default_factory is None:
            args = tuple()
        else:
            args = self.default_factory,
        return type(self), args, None, None, self.items()

    def copy(self):
        return self.__copy__()

    def __copy__(self):
        return type(self)(self.default_factory, self)

    def __deepcopy__(self, memo):
        import copy
        return type(self)(self.default_factory,
                          copy.deepcopy(self.items()))

    def __repr__(self):
        return 'OrderedDefaultDict(%s, %s)' % (self.default_factory,
                                               OrderedDict.__repr__(self))</code>

此程式碼片段包含一個 __init__ 方法,可讓您指定預設工廠函數。 __missing__ 方法處理按鍵存取並使用工廠函數分配預設值。此外,還定義了 __reduce__、copy()、__copy__()、__deepcopy__() 和 __repr__() 等各種方法,用於正確醃製和表示此自訂字典。

透過使用此 DefaultOrderedDict 類,您可以建構一個有序字典,為缺失的鍵提供預設值。這種方法結合了有序金鑰管理和動態值分配的優點。

以上是如何在 Python 中實作有序的 defaultdict 來維護鍵順序並分配預設值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn