歡迎加入QQ討論群258996829
麥子學院 頭像
蘋果6袋
6
麥子學院

python中defaultdict如何使用?

發(fā)布時間:2018-04-10 17:28  回復:0  查看:2747   最后回復:2018-04-10 17:28  
本文和大家分享的主要是python defaultdict的使用,dict 很好理解,可是有一個使用起來不方便的地方在于,需要進行初始值是否初始化的判斷,具體的下面將和大家詳細介紹,希望對大家 學習python有所幫助。
  list = ["aaa", "bbb", "ccc"]
  kv = {} for d  in list:
   if kv[d.id]:
  kv[d.id] += 1
   else:
  kv[d.id] = 1
  對于python 來說,這很不酷,所以, defaultdict 這個東西就出現(xiàn)了,上面的代碼,可以改為:
  from collections  import defaultdict
  list = ["aaa", "bbb", "ccc"]
  kv = defaultdict( int) for d in list:
  kv[d.id] += 1
  也就是說,defaultdict 能自動將沒有創(chuàng)建的值,使用傳入的函數(shù)來初始化,比如傳入 list ,就能直接創(chuàng)建列表,使用的時候可以直接 append 。
  除了這些基礎用法,還有更加hack 的用法,比如如下這個需求:
  為對象進行編號,如果某幾個屬性相同,那么編為同一組。
  這并不是一個多復雜的需求,只是用defaultdict 來實現(xiàn),會顯得比其他方法優(yōu)雅很多:
  from collections  import defaultdict
  from itertools  import count
  group_value = defaultdict(count().__next__)
  group_value_list = [group_value[(o.p1, o.p2, o.p3)]  for o  in object_list]
  使用了count 的  next  方法,在往group_value 設置值的時候,會自動生成一個值,當 key 相同的時候,值是相同的,當 key 不同的時候,自動將數(shù)字增加 1 ,當做值,這樣,就能生成一個分組的列表了。
  defaultdict 增強了原 dict 的功能,并且如果創(chuàng)造力足夠,會讓程序更加優(yōu)雅。
來源:網絡
您還未登錄,請先登錄

熱門帖子

最新帖子

?