使用defaultdict为字典设置默认值

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"]

你可能感兴趣的:(使用defaultdict为字典设置默认值)