python-辞書初期化


dequeが補強版のlistだとしたら、補強版の辞書は何ですか?そう、今日勉強したdefaultdictです.dequeと同じcollectionsライブラリのモジュールです.
まず、このような問題を見てみましょう.
s = [('Tom', 5), ('Jone', 2), ('Susan', 4), ('Tom', 4), ('Tom', 1)]
このようなメタグループリストについて、辞書に変換したい場合は、どのように操作しますか?私たちはこのような操作を簡単に考えます.
d={}
s = [('Tom', 5), ('Jone', 2), ('Susan', 4), ('Tom', 4), ('Tom', 1)]
for i,j in s:
    d[i]=j

printちょっと、結果は何ですか?
{'Susan': 4, 'Jone': 2, 'Tom': 1}

これは私たちが期待していた結果ではありません.この例では、辞書の「Tom」キーは3つの値に対応しており、この3つの値をリスト形式で格納することを望んでいます.コードをいくつか変更できます.
k={}
s = [('Tom', 5), ('Jone', 2), ('Susan', 4), ('Tom', 4), ('Tom', 1)]
for i,j in s:
    if i not in k.keys():#       if not k[i],        None,  error
        l=[]
        l.append(j)
        k[i]=l
    else:
        k[i].append(j)
print(k)
の結果は次のとおりです.
{'Susan': [4], 'Jone': [2], 'Tom': [5, 4, 1]}

もちろん、もっとpythonicの書き方は以下のように、今日勉強したdefaultdictを使う必要があります.
from collections import defaultdict
d=defaultdict(list)
s = [('Tom', 5), ('Jone', 2), ('Susan', 4), ('Tom', 4), ('Tom', 1)]
for i,j in s:
    d[i].append(j)
print(list(d.items()))

パス:
d=defaultdict(list)

キーが存在するかどうかにかかわらず、デフォルト値がリストの辞書を作成しました.
>>> d=defaultdict(list)
>>> d[1]
[]

このときキー[1]は存在しないが、エラーは投げ出されず、空のリストを返すことが分かった.
もちろん、デフォルト値をset,int,etcにすることもできます.前に実装した方法を変更して、リストを集合に変更することができます.
from collections import defaultdict
d=defaultdict(set)
s = [('Tom', 5), ('Jone', 2), ('Susan', 4), ('Tom', 4), ('Tom', 1)]
for i,j in s:
    d[i].add(j)
print(list(d.items()))
    
の結果は次のとおりです.
[('Susan', {4}), ('Jone', {2}), ('Tom', {1, 4, 5})]
デフォルトがintでキーが存在しない場合、戻り値はデフォルトで0です.
>>> d=defaultdict(int)
>>> d[1]
0
>>> d[3]
0