这里的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