順序付きのデフォルト Dict の実装
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>
ただし、キーが存在しない場合は、ファクトリ関数からのデフォルト値が生成されます:
<code class="python">print(ordered_default_dict['missing_key']) # Output: 0</code>
以上がPython で順序付きのデフォルト辞書を作成するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。