collections
defaultdict
Python 的 defaultdict
是 collections
模块中的一个非常有用的容器,它是对内置字典(dict
)的一种增强,用于在访问不存在的键时自动创建默认值,避免抛出 KeyError
。
基本语法
from collections import defaultdict
d = defaultdict(default_factory)
|
default_factory
是一个可调用对象(通常是类型,如 int
、list
、set
等),当访问不存在的键时,defaultdict
会自动调用它来生成该键的默认值。
使用示例
使用 list
作为默认工厂
from collections import defaultdict
d = defaultdict(list) d['a'].append(1) d['a'].append(2) d['b'].append(3)
print(d)
|
这相当于:
d = {} if 'a' not in d: d['a'] = [] d['a'].append(1)
|
使用 int
作为默认工厂(默认值为 0)
from collections import defaultdict
d = defaultdict(int) d['apple'] += 1 d['banana'] += 2
print(d)
|
这是统计频率非常常用的方式。
使用 lambda
自定义默认值
from collections import defaultdict
d = defaultdict(lambda: 'unknown') print(d['name'])
|
与普通字典的区别
特性 |
dict |
defaultdict |
访问不存在的键 |
抛出 KeyError |
自动创建并返回默认值 |
用于计数、分组等情况 |
需要手动判断键是否存在 |
自动处理更简洁 |
注意事项
- 如果访问一个不存在的键,
default_factory
会被调用一次并生成该键的值。
- 如果你不希望字典“自动”增长,请用普通
dict
,因为 defaultdict
会改变字典的大小。
Counter
Counter
是 Python 标准库 collections
中的一个非常实用的类,专门用于计数对象中元素的出现次数。它本质上是 dict
的一个子类,但做了专门的优化,适用于频率统计、直方图计算等任务。
基本语法
from collections import Counter
c
|