defaultdict 是使用C语言写的一个类,因此性能也是很高
from collections import defaultdict
传统统计一个列表中元素重复次数
user_dict = {}
user_list = ['hongshaorou1', 'hongshaorou2', 'hongshaorou2', 'hongshaorou3', 'hongshaorou1']
for user in user_list:
if user not in user_dict:
user_dict[user] = 1
else:
user_dict[user] += 1
我们可以使用setdefault简化代码,setdefault可以为不存在的键设置默认值
使用setdefault比上面的方法要高效,因为少做了一次查询
for user in user_list:
user_dict.setdefault(user, 0)
user_dict[user] += 1
我们先看一下defaultdict的特性
# In [1]: from collections import defaultdict
#
# In [2]: default_dict = defaultdict(int)
#
# In [3]: default_dict['hongshaorou']
# Out[3]: 0
我们使用defaultdict函数可以为不存在的键赋默认值,可以是list对应[],也可以是int对应0
defaultdict函数的传入的是可调用对象: list,int,dict
增加了代码严谨性,便于初始化
使用defaultdict完成计数
default_dict = defaultdict(int)
for user in user_list:
default_dict[user] += 1
如果我们想直接在defaultdict函数里面初入带值的的dict是不允许的
group_dict = {
"group1": {
"name": "",
"nums": 0
}
}
我们可以使用方法,返回想要默认填充的字典值,因为方法面也是可调用对象
def gene_default():
return {
"name": "",
"nums": 0
}
default_dict = defaultdict(gene_default)
default_dict["group1"]
网友评论