源码位置
- 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)
,那么返回的字典实例退化为普通字典