collections.defaultdict
是 Python 标准库 collections
模块中的一个类,它提供了字典的所有功能,但具有一个额外的特点:它允许你为字典提供一个默认值工厂函数,当访问不存在的键时,字典会自动插入一个带有默认值的新条目,而不是引发 KeyError
异常。
以下是 defaultdict
的主要特性和用法:
创建 defaultdict
要创建一个 defaultdict
,你需要传递一个工厂函数给它,这个工厂函数决定了当访问不存在的键时所插入的默认值。例如:
from collections import defaultdict
# 使用 int 作为默认值工厂函数
d = defaultdict(int)
print(d['key']) # 输出 0
# 使用 list 作为默认值工厂函数
d = defaultdict(list)
print(d['key']) # 输出 []
# 使用 lambda 函数指定默认值
d = defaultdict(lambda: 'default value')
print(d['key']) # 输出 'default value'
使用场景
defaultdict
通常用于需要处理大量键值对数据的场景,尤其是当访问的键可能不存在时。以下是几个常见的使用场景:
- 计数器:
s = 'mississippi' d = defaultdict(int) for char in s: d[char] += 1 print(d) # 输出: defaultdict(<class 'int'>, {'m': 1, 'i': 4, 's': 4, 'p': 2})
- 分组元素:
items = [('apple', 1), ('banana', 2), ('apple', 3), ('banana', 4)] d = defaultdict(list) for fruit, number in items: d[fruit].append(number) print(d) # 输出: defaultdict(<class 'list'>, {'apple': [1, 3], 'banana': [2, 4]})
- 构建多层字典:
d = defaultdict(lambda: defaultdict(int)) d['outer']['inner'] += 1 print(d) # 输出: defaultdict(<function <lambda> at 0x...>, {'outer': defaultdict(<class 'int'>, {'inner': 1})})
注意事项
defaultdict
的默认值工厂函数在键第一次被访问时调用,仅在该时刻创建默认值。- 由于
defaultdict
是一个字典子类,因此可以使用所有标准字典方法。 - 直接访问不存在的键会触发默认值创建,但如果你想避免这种行为,可以先检查键是否存在:
if 'key' in d:
print(d['key'])
使用 collections.defaultdict
可以简化代码,避免手动检查键是否存在,从而提高代码的可读性和简洁性。
0 评论
大哥整点话呗~