1. ホーム
  2. python

[解決済み] defaultdictのネストされたdefaultdict

2022-04-20 11:59:20

質問

defaultdictをdefaultdictのデフォルトにもする方法はありますか?(つまり、無限レベルの再帰的なdefaultdict?)

できるようにしたい。

x = defaultdict(...stuff...)
x[0][1][0]
{}

だから、私はできる x = defaultdict(defaultdict) しかし、それは第二階層に過ぎない。

x[0]
{}
x[0][0]
KeyError: 0

これを実現するレシピがあるのです。しかし、通常のdefaultdictの引数を使うだけでできるのでしょうか?

これは無限レベルの再帰的なdefaultdictをどのように行うかを尋ねていることに注意してください。 Python: defaultdictのdefaultdict? という、2レベルのdefaultdictを行う方法でした。

結局は というパターンがあるのですが、この方法を知らないことに気づいて、興味を持ちました。

どのように解決するの?

任意のレベル数の場合。

def rec_dd():
    return defaultdict(rec_dd)

>>> x = rec_dd()
>>> x['a']['b']['c']['d']
defaultdict(<function rec_dd at 0x7f0dcef81500>, {})
>>> print json.dumps(x)
{"a": {"b": {"c": {"d": {}}}}}

もちろん、これをラムダで行うこともできますが、私はラムダは可読性が低いと感じています。 いずれにせよ、このようになる。

rec_dd = lambda: defaultdict(rec_dd)