這裏的defaultdict(function_factory)構建的是一個相似dictionary的對象,其中keys的值,自行肯定賦值,可是values的類型,是function_factory的類實例,並且具備默認值。app
使用list做第一個參數,能夠很容易將鍵-值對序列轉換爲列表字典。函數
1 import collections 2 s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)] 3 4 d = collections.defaultdict(list) 5 for k, v in s: 6 d[k].append(v)#這裏的結構是k:[] 因此這裏能夠append 7 8 9 print(d.items()) 10 11 print(d["aaa"]) #獲取不存在的key並不會報錯
輸出:spa
dict_items([('yellow', [1, 3]), ('blue', [2, 4]), ('red', [1])]) []
dict_items 統計」yellow」 的全部v的值, d[「aaa」] 沒有此key返回空列表code
字典也有相似功能:對象
1 s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)] 2 d={} 3 for k, v in s: 4 d.setdefault(k,[]).append(v) 5 6 print(d.items())
這個方法便捷性差一些 dict.setdefault()blog
defaultdict計數,將default_factory設爲int便可ip
1 from collections import defaultdict 2 s = 'mississippiasdjklajskdlzxzxcmasdasdzxc' 3 d = defaultdict(int) 4 5 for k in s: 6 d[k] += 1 7 8 print(d.items())
結果:字符串
dict_items([('m', 2), ('i', 4), ('s', 8), ('p', 2), ('a', 4), ('d', 4), ('j', 2), ('k', 2), ('l', 2), ('z', 3), ('x', 3), ('c', 2)])it
字符串中的字母第一次出現時,字典中沒有該字母,default_factory函數調用int()爲其提供一個默認值0,加法操做將計算出每一個字母出現的次數。io
使用函數返回
此函數不能帶參數
1 from collections import defaultdict 2 def constant_factory(value): 3 return lambda: 0 4 d = defaultdict(constant_factory(s)) 5 6 print(d["aaa"])
0
使用lambda來完成統計
1 from collections import defaultdict 2 s = 'mississippiasdjklajskdlzxzxcmasdasdzxc' 4 counter = defaultdict(lambda: 0) 5 for kw in s: 6 counter[kw] += 1