python-辞書初期化
2177 ワード
dequeが補強版のlistだとしたら、補強版の辞書は何ですか?そう、今日勉強したdefaultdictです.dequeと同じcollectionsライブラリのモジュールです.
まず、このような問題を見てみましょう.
printちょっと、結果は何ですか?
これは私たちが期待していた結果ではありません.この例では、辞書の「Tom」キーは3つの値に対応しており、この3つの値をリスト形式で格納することを望んでいます.コードをいくつか変更できます.
もちろん、もっとpythonicの書き方は以下のように、今日勉強したdefaultdictを使う必要があります.
パス:
キーが存在するかどうかにかかわらず、デフォルト値がリストの辞書を作成しました.
このときキー[1]は存在しないが、エラーは投げ出されず、空のリストを返すことが分かった.
もちろん、デフォルト値をset,int,etcにすることもできます.前に実装した方法を変更して、リストを集合に変更することができます.
まず、このような問題を見てみましょう.
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