ちょっとしたTips。
辞書(dict)は通常、一つのキーには一つの値しか登録できない。代入しても上書きされる。
>>> d = {} >>> d["hoge"] = 1 >>> d {'hoge': 1} >>> d["hoge"] = 2 >>> d {'hoge': 2}
こういうときどうすれば良いのかというと、値をリスト等にしておいて、そのリストにappendしていけば良い。どのように使いたいかにもよるのだが、大抵はこれで用が済む。
スポンサーリンク
defaultdictを使うと面倒な初期化処理が省けて便利。
>>> from collections import defaultdict >>> d = defaultdict(list) >>> d["hoge"].append(1) >>> d["hoge"].append(2) >>> d defaultdict(<class 'list'>, {'hoge': [1, 2]}) >>> d["hoge"] [1, 2]
別にlistじゃなくても、setだろうがdictだろうが何でも指定できる。tupleも指定はできるが、変更できないと何の役にも立たない。
>>> d = defaultdict(set) # setの場合 >>> d["hoge"].add(1) # setの場合はaddを使う >>> d["hoge"].add(1) >>> d["hoge"].add(2) >>> d["hoge"] {1, 2} # 重複しないことに注目 >>> d = defaultdict(dict) # dictの場合 >>> d["hoge"][1] = 1 >>> d["hoge"][2] = 2 >>> d["fuga"][-1] = -1 >>> d["fuga"][-2] = -2 >>> d defaultdict(<class 'dict'>, {'hoge': {1: 1, 2: 2}, 'fuga': {-2: -2, -1: -1}}) # よくわからないけど何でもできそう
参考:
8.3. collections — コンテナデータ型 — Python 3.6.5 ドキュメント
mutableなコレクション型を辞書の値にしておく、という発想があればそれほど難しい話ではない。