Python-collections模块之defaultdict

2021-03-03 10:26

阅读:500

标签:==   set   默认   for循环   比较   htm   对象   cts   代码   

defaultdict

defaultdict 是 dict 类型的子类,正如其名,初始化时,可以给key指定默认值,什么意思呢?直接看代码。
如果是普通的dict对象,访问一个不存在的key时,会报错:

dict1 = dict()
print(dict1[a])
"""
Traceback (most recent call last):
  File "D:/Projects/test/t1.py", line 14, in 
    print(dict1[‘a‘])
KeyError: ‘a‘
"""

而使用defaultdict,可以给不存在的key给一个默认的初始值,例如:
默认空列表的dict:

from collections import defaultdict

res1 = defaultdict(list)
print(res1[a])  # []
print(res1.get(a))  # []
print(res1.get(a, hello world 1))  # []

关于defaultdict的一些应用场景:
场景一:我们经常想要将一个列表中的数据进行整合,比如这种:

from collections import 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)

参考:https://www.cnblogs.com/suguangti/p/13150567.html

Python-collections模块之defaultdict

标签:==   set   默认   for循环   比较   htm   对象   cts   代码   

原文地址:https://www.cnblogs.com/leetcodesumup/p/14396132.html


评论


亲,登录后才可以留言!