深入理解Python中的数据结构:defaultdict
目录
1. 什么是defaultdict?
定义
作用
2. defaultdict的基本用法
导入模块
创建defaultdict
访问与操作
3. defaultdict的特性
自动初始化键
工厂函数
保持字典所有特性
4. 与dict的比较
普通字典的缺点
defaultdict的优势
性能对比
5. 常见用途和应用场景
计数统计
分组数据
构建多级字典
6. 高级用法与扩展
嵌套defaultdict
自定义工厂函数
7. 代码示例
示例1:字符频率统计
示例2:按年份分组事件
8. 性能比较与优化
defaultdict性能优势
性能测试
9. 遇到的常见问题及解决方案
问题1:访问键时不需要默认值
问题2:嵌套字典初始化
10. 总结
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")
作者:圣逸