目录
1. 什么是defaultdict?
defaultdict
是Python标准库collections
模块中的一个类,继承自内置字典类型。不同于普通的字典,defaultdict
允许您为字典提供一个默认值工厂函数,当访问不存在的键时,会自动调用该函数生成默认值,并将其关联到该键。
定义
from collections import defaultdict
# 创建一个defaultdict,默认值为整数0
d = defaultdict(int)
作用
defaultdict
主要用于简化代码,避免在访问字典键时出现KeyError
异常,并能自动为缺失的键生成默认值。
2. defaultdict的基本用法
导入模块
使用defaultdict
之前,需要先导入collections
模块:
from collections import defaultdict
创建defaultdict
可以通过传递一个可调用的工厂函数(如int
、list
、set
等)来创建defaultdict
:
# 默认值为整数0
int_defaultdict = defaultdict(int)
# 默认值为空列表
list_defaultdict = defaultdict(list)
# 默认值为空集合
set_defaultdict = defaultdict(set)
访问与操作
defaultdict
的使用方式和普通字典几乎一致:
# 默认值为整数0的defaultdict
d = defaultdict(int)
d['a'] += 1 # d['a'] 不存在,自动创建并设为0,再加1
print(d) # 输出: defaultdict(<class 'int'>, {'a': 1})
# 默认值为空列表的defaultdict
d_list = defaultdict(list)
d_list['a'].append(1) # d_list['a'] 不存在,自动创建为空列表,再加入1
print(d_list) # 输出: defaultdict(<class 'list'>, {'a': [1]})
3. defaultdict的特性
自动初始化键
defaultdict
最大的特性是在访问不存在的键时会自动初始化该键,而不是抛出KeyError
异常:
d = defaultdict(int)
print(d['missing_key']) # 输出: 0
工厂函数
工厂函数是一个可调用对象(函数、类等),用于生成默认值。在创建defaultdict
时必须指定:
d = defaultdict(lambda: "default value")
print(d['undefined']) # 输出: default value
保持字典所有特性
defaultdict
继承自内置字典类型,因此具备所有字典的特性和方法:
d = defaultdict(int)
d['x'] = 10
# 使用字典方法
print(d.keys()) # 输出: dict_keys(['x'])
print(d.values()) # 输出: dict_values([10])
4. 与dict的比较
普通字典的缺点
普通字典在访问不存在的键时会抛出KeyError
异常,需要手动处理:
d = {}
try:
print(d['missing_key'])
except KeyError:
print("Key not found")