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
相關文章
相關標籤/搜索