Swift51.com
麦子学院 头像
麦子学院  2018-04-10 17:28

python中defaultdict如何使用?

回复:0  查看:2787  
本文和大家分享的主要是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 这个东西就出现了,上面的代码,可以改为:
  from collections  import defaultdict
  list = ["aaa", "bbb", "ccc"]
  kv = defaultdict( int) for d in list:
  kv[d.id] += 1
  也就是说,defaultdict 能自动将没有创建的值,使用传入的函数来初始化,比如传入 list ,就能直接创建列表,使用的时候可以直接 append
  除了这些基础用法,还有更加hack 的用法,比如如下这个需求:
  为对象进行编号,如果某几个属性相同,那么编为同一组。
  这并不是一个多复杂的需求,只是用defaultdict 来实现,会显得比其他方法优雅很多:
  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 不同的时候,自动将数字增加 1 ,当做值,这样,就能生成一个分组的列表了。
  defaultdict 增强了原 dict 的功能,并且如果创造力足够,会让程序更加优雅。
来源:网络