defaultdict 是 Python 中 collections 模组提供的一种字典类型,它是 dict 的子类,专门用来处理缺失键的情况。与普通字典相比,defaultdict 的主要特点是当你访问一个不存在的键时,它会自动为该键创建一个预设值,而不会引发 KeyError。
主要特点
自动创建缺失键: 当你访问一个不存在的键时,defaultdict 会自动使用你指定的工厂函数(如 list, int, str 等)来创建该键的值。可设置的预设值: 在创建 defaultdict 时,你可以指定一个工厂函数,这个函数会被调用以生成缺失键的预设值。
from collections import defaultdict
# 创建一个 defaultdict,预设值为空列表
dd_list = defaultdict(list)
# 对于不存在的键,自动创建一个空列表并添加元素
dd_list[\'fruits\'].append(\'apple\')
dd_list[\'fruits\'].append(\'banana\')
print(dd_list) # 输出: defaultdict(<class \'list\'>, {\'fruits\': [\'apple\', \'banana\']})
# 创建一个 defaultdict,预设值为整数(0)
dd_int = defaultdict(int)
# 对于不存在的键,自动创建并初始化为0
dd_int[\'a\'] += 1
dd_int[\'b\'] += 2
print(dd_int) # 输出: defaultdict(<class \'int\'>, {\'a\': 1, \'b\': 2})
你可以使用不同的工厂函数来定义预设值:
- 使用 list:
dd = defaultdict(list)
dd[\'key\'].append(1)
print(dd) # 输出: defaultdict(<class \'list\'>, {\'key\': [1]})
- 使用 int:
dd = defaultdict(int)
dd[\'count\'] += 1
print(dd) # 输出: defaultdict(<class \'int\'>, {\'count\': 1})
- 使用自定义函数:
def custom_default():
return "default_value"
dd = defaultdict(custom_default)
print(dd[\'missing_key\']) # 输出: default_value
总结
defaultdict 是一个非常有用的工具,可以简化处理缺失键的代码,使代码更加简洁和易读。它特别适合用于计数、分组等需要动态添加键值对的场