pythonのdefaultdict()について

defaultdict()をsklearnの実装で見かけて、調べたのでメモ。

サンプルコード

 from collections import defaultdict
 
 dict = defaultdict()
 dict.default_factory = dict.__len__
 
 dict["a"]
 dict["b"]
 dict["c"]
 
 print(dict["a"], dict["b"], dict["c"])
 
 # 出力 0 1 2

解説

default_factoryを設定することで、dictにkeyのみで(valueを渡さずに)追加しようとした場合の挙動を変更できる。 上記のコードでは、dict.default_factory = dict.__len__としているので、keyを追加しようとしたときのdictのlenがvalueとして設定される。

公式の使い方の例では、key-valueのペアのシーケンスをlistに変更して、keyに対してlistが設定できるように変更する例が示されている。これはたまに使いそうなデータ構造なのでやり方を覚えておきたい。

参考