ホームページ >バックエンド開発 >Python チュートリアル >Python でネストされた辞書を効率的に実装するにはどうすればよいですか?
辞書のサブクラスを実装し、__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 はより便利で読みやすいソリューションを提供できます。
サブクラスとネストされた辞書を実装する__missing__ は、特定のユースケースに合わせて調整できる強力で柔軟なアプローチを提供します。いくつかの潜在的な落とし穴が生じる可能性がありますが、コードの可読性とデータ操作の点で利点も得られます。 dict.setdefault や auto-vivifieddefaultdict などの代替メソッドは、さまざまな程度のパフォーマンスと出力の読みやすさで独自の目的を果たします。
以上がPython でネストされた辞書を効率的に実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。