collections.defaultdict——自带默认返回值的字典

源码位置

  • python自带库,from collections import defaultdict可以直接导入该类

使用方式

from collections import defaultdict  

# 表示使用list方法作为默认工厂,当读取的key不存在时,调用默认工厂生成一个对象作为value返回
res = defaultdict(list) 

# 读取不存在的key的时候不会报错,而是会生成一个新的列表对象,将这个列表作为value存入对应的key,并将其返回
# 当读取了一次不存在的key,即便没有保存或者进一步操作,也会根据默认值创建对应的key:value数据并保存到字典中
res["key_not_exist"]  # 字典内的值变为{"key_not_exist": []}


# 可以直接对默认值进行操作,不会因为key不存在导致报错
res["new_key"].append("123")  # 字典内的值变为{"key_not_exist": [],"new_key": ["123"]}

# 避免使用dict时,需要额外判断key是否存在的复杂步骤
if "new_key" not in res:  
    k = []  
 	k.append("123")  
 	res["new_key"] = k  
else:  
    res["new_key"].append("123")

注意事项

  • 默认工厂参数的传入仅支持按位置传递defaultdict(default_factory=None, /, [...]) --> dict,其它参数依旧按照dict的使用方式正常传递即可
  • 默认工厂参数仅支持传递无参数的可执行对象(callable),一般情况使用官方的list/dict/map等基础类型即可
  • 如果默认值传入None,defaultdict(None),那么返回的字典实例退化为普通字典