Python でデフォルト値を持つ順序付き辞書を作成するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-10-28 03:37:30
オリジナル
294 人が閲覧しました

How can I create an ordered dictionary with default values in Python?

OrderedDict とdefaultdict を組み合わせて順序付きデフォルト辞書を作成する

OrderedDict とdefaultdict は、Python のコレクション モジュールの 2 つの強力なデータ構造です。 OrderedDict は要素の順序を維持しますが、defaultdict は欠落しているキーのデフォルト値を提供します。ただし、これらの機能を 1 つのデータ構造に組み合わせるのは難しい場合があります。

DefaultOrderedDict を使用したカスタム実装

考えられる解決策の 1 つは、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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!