深入理解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

可以通过传递一个可调用的工厂函数(如intlistset等)来创建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")

作者:圣逸

物联沃分享整理
物联沃-IOTWORD物联网 » 深入理解Python中的数据结构:defaultdict

发表回复