Ruby
Python

#python の ネストされた辞書で KeyError を起こさないように defaultdict を利用する例 ( #ruby 比較 )


example


  • defaultdict を何層にもネストして使ってみる


  • d["x"]["y"]["z"] のように存在しないキーを書いても怒られない

  • もしかしたら良い子は真似しちゃダメかもしれない

>>> from collections import defaultdict

>>> d = defaultdict(lambda: defaultdict(lambda: defaultdict(lambda: 0)))
>>> d["a"]["b"]["c"] = 1
>>> d["a"]["b"]["c"]
1
>>> d["x"]["y"]["z"]
0


ruby で書くなら

こんな感じだったかな。こちらも良い子はマネし‥。

[27] pry(main)> h = Hash.new(Hash.new(Hash.new(0)))

=> {}
[28] pry(main)> h["a"]["b"]["c"] = 1
=> 1
[29] pry(main)> h["a"]["b"]["c"]
=> 1
[30] pry(main)> h["x"]["y"]["z"]
=> 0


ref

Python defaultdict の使い方 - Qiita


Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/1284