概述
defaultdict
defaultdict 是 dict 类型的子类,正如其名,初始化时,可以给key指定默认值。
如果是普通的dict对象,访问一个不存在的key时,会报错:
dict1 = dict()
print(dict1['a'])
KeyError: 'a'
而使用defaultdict,dict中不存在key ,会输出默认的初始值,例如,设置默认空列表dict,返回也是[]:
from collections import defaultdict
res1 = defaultdict(list)
print(res1['a']) # []
print(res1.get('a')) # []
print(res1.get('a', 'hello world 1')) # []
默认给一个0的dict:
from collections import defaultdict
res2 = defaultdict(int)
print(res2['a']) # 0
print(res2.get('a')) # 0
print(res2.get('a', 'hello world 2')) # 0
defaultdict方法接收的参数是一个可调用对象,可以简单理解为一个函数对象,我们知道python中一切皆对象,int、list本来以上一个函数对象,这里如果想要默认值不是0,而是999,该怎么处理呢?
使用匿名函数,指定defaultdict默认值:
from collections import defaultdict
res3 = defaultdict(lambda: 999)
print(res3['b']) # 999
print(res3.get('b')) # 999
print(res3.get('b', 0)) # 999
当然也可以使用自定义函数,指定defaultdict默认值:
from collections import defaultdict
def get_default():
return 'Hello World !'
res4 = defaultdict(get_default)
print(res4['b']) # Hello World !
print(res4.get('b')) # Hello World !
print(res4.get('b', 0)) # Hello World !
- 关于defaultdict的一些应用场景:
场景一:我们经常想要将一个列表中的数据进行整合,比如这种:
initial_data = [('class1', '张三'), ('class2', '李四'), ('class1', '王五'),
('class3', '赵六'), ('class3', '李刚弹'), ('class2', '王大炮'),
('class1', '王大锤'), ('class2', '李二狗'), ('class1', '佚名')
]
变成:
finally_data = {
'class1': ['张三', '王五', '王大锤', '佚名'],
'class2': ['李四', '王大炮', '李二狗', ],
'class3': ['赵六', '李刚弹']
}
如果自己实现的话可能会用for循环依次判断,又或者使用到setdefault方法也可以。这里如果使用defaultdict方法算是一种比较优雅的解决:
res5 = defaultdict(list)
for k, v in initial_data:
res5[k].append(v)
print(res5 == finally_data) # True
}
附:使用setdefault也可以优雅的解决
res6 = {}
for k, v in initial_data:
res6.setdefault(k, []).append(v)
print(res6 == finally_data) # True
参考:
https://www.cnblogs.com/thsk/p/8404425.html
最后
以上就是迷路羊为你收集整理的collections的defaultdict使用的全部内容,希望文章能够帮你解决collections的defaultdict使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复