首頁 >後端開發 >Python教學 >如何在 Python 中建立有序的預設字典?

如何在 Python 中建立有序的預設字典?

Linda Hamilton
Linda Hamilton原創
2024-10-29 18:28:02568瀏覽

How to Create an Ordered Default Dict in Python?

實作有序的預設字典

Python 中的內建集合模組提供 OrderedDict 和 defaultdict,每個都提供不同的功能。 OrderedDict 保留其元素的插入順序,而 defaultdict 則會根據指定的工廠函數自動產生缺失鍵的預設值。

結合兩者的力量

結合這兩種資料結構的功能,我們可以建立一個有序的預設字典,該字典保留其元素的順序並使用預設值初始化缺失的鍵。這可以透過擴展 OrderedDict 類別來實現。

自訂類別:DefaultOrderedDict

以下自訂類別DefaultOrderedDict 繼承自OrderedDict 並加入處理缺失鍵的功能:

<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>
用法

這個類別可以像普通的OrderedDict 一樣使用:

但是,如果一個鍵是不存在,則產生工廠函數的預設值:
<code class="python">ordered_default_dict = DefaultOrderedDict(lambda: 0)
ordered_default_dict['key1'] = 1
ordered_default_dict['key2'] = 2</code>

以上是如何在 Python 中建立有序的預設字典?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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