本文和大家分享的主要是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
的功能,并且如果创造力足够,会让程序更加优雅。
来源:网络