collections.defaultdict()的使用

       这里的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
相关文章
相关标签/搜索