ホームページ > バックエンド開発 > Python チュートリアル > Python でネストされた辞書を効率的に実装するにはどうすればよいですか?

Python でネストされた辞書を効率的に実装するにはどうすればよいですか?

DDD
リリース: 2024-12-23 04:54:22
オリジナル
458 人が閲覧しました

How Can I Efficiently Implement Nested Dictionaries in Python?

__missing__ のサブクラスを使用したネストされた辞書の実装

辞書のサブクラスを実装し、__missing__ メソッドをオーバーライドすることは、辞書を作成するための創造的なアプローチです。ネストされた辞書。このメソッドは、不足しているキーをインターセプトして適切に処理する方法を提供します。仕組みは次のとおりです:

  1. サブクラス dict: dict を継承する Vividict などの新しいクラスを定義します。
  2. Override __missing__: サブクラスで、欠落しているキーを処理する __missing__ メソッドを定義します。このメソッド内で、サブクラスの新しいインスタンスを作成し、それを欠落しているキーの値として設定できます。

Vividict の実装例を次に示します。

class Vividict(dict):
    def __missing__(self, key):
        value = self[key] = type(self)()
        return value
ログイン後にコピー

使用このサブクラスを使用すると、ネストされた辞書をその場で作成できます。

d = Vividict()
d['foo']['bar'] = 1
d['foo']['baz'] = 2
print(d)  # {'foo': {'bar': 1, 'baz': 2}}
ログイン後にコピー

このアプローチでは、クリーンな辞書が提供されます。ネストされた辞書にデータを入力するための構文を使用し、複雑な階層構造を作成するプロセスを簡素化します。

その他の代替案

__missing__ を使用したカスタム サブクラスの使用以外に、他の代替案をいくつか示します。ネストされた場合辞書:

1. dict.setdefault:

dict.setdefault を使用すると、ネストされた辞書を作成する簡潔な方法が提供されますが、複雑な構造の場合、構文が冗長になる可能性があります。

d = {}
d.setdefault('foo', {}).setdefault('bar', []).append(1)
d.setdefault('foo', {}).setdefault('baz', []).append(2)
print(d)  # {'foo': {'bar': [1], 'baz': [2]}}
ログイン後にコピー

2.自動有効化されたdefaultdict:コレクションモジュールの

defaultdictを使用して、必要に応じてネストされた辞書を自動的に作成する自動有効化された辞書を作成できます。ただし、このアプローチでは、データのデバッグまたは検査時に出力が乱雑になる可能性があります。

from collections import defaultdict

def vivdict():
    return defaultdict(vivdict)

d = vivdict()
d['foo']['bar'] = 1
d['foo']['baz'] = 2
print(d)  # defaultdict(...defaultdict(...defaultdict(...))), etc.
ログイン後にコピー

3.タプル キー:

ネストされた辞書を使用する代わりに、タプルをキーとして使用することを検討してください。このアプローチでは反復と集計が簡素化されますが、辞書のサブセットを管理するためのコードが構文的により複雑になる可能性があります。

d = {('foo', 'bar'): 1, ('foo', 'baz'): 2}
ログイン後にコピー

パフォーマンスに関する考慮事項

パフォーマンスに関しては、dict一般に、実稼働コードでは .setdefault が最も効率的です。ただし、実行速度がそれほど重要ではない対話型の使用の場合、Vividict はより便利で読みやすいソリューションを提供できます。

gt;結論

サブクラスとネストされた辞書を実装する__missing__ は、特定のユースケースに合わせて調整できる強力で柔軟なアプローチを提供します。いくつかの潜在的な落とし穴が生じる可能性がありますが、コードの可読性とデータ操作の点で利点も得られます。 dict.setdefault や auto-vivifieddefaultdict などの代替メソッドは、さまざまな程度のパフォーマンスと出力の読みやすさで独自の目的を果たします。

以上がPython でネストされた辞書を効率的に実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート