defaultdict 是使用C語言寫的一個類充包,因此性能也是很高
from collections import defaultdict
傳統(tǒng)統(tǒng)計一個列表中元素重復次數(shù)
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函數(shù)可以為不存在的鍵賦默認值罢艾,可以是list對應[],也可以是int對應0
defaultdict函數(shù)的傳入的是可調用對象: list,int,dict
增加了代碼嚴謹性测砂,便于初始化
使用defaultdict完成計數(shù)
default_dict = defaultdict(int)
for user in user_list:
default_dict[user] += 1
如果我們想直接在defaultdict函數(shù)里面初入帶值的的dict是不允許的
group_dict = {
"group1": {
"name": "",
"nums": 0
}
}
我們可以使用方法,返回想要默認填充的字典值奥喻,因為方法面也是可調用對象
def gene_default():
return {
"name": "",
"nums": 0
}
default_dict = defaultdict(gene_default)
default_dict["group1"]