网站维护常识2020年关键词排名
- 默认字典 (`defaultdict`) 的语法
- `defaultdict` 的常见应用场景
- 1. 计数
- 2. 分组
- 3. 嵌套字典
defaultdict
是 Python 中
collections
模块提供的一个字典类,它和普通字典(
dict
)的主要区别在于
提供了一个默认值,可以避免在访问字典中不存在的键时抛出
KeyError
异常。
defaultdict
是dict
的一个变种,它通过default_factory
自动为不存在的键提供默认值,避免了KeyError
异常。- 它的工厂函数(
default_factory
)可以是int
、list
、set
、dict
等。 - 在需要计数、分组、或者处理嵌套数据结构时,
defaultdict
能让代码更加简洁、清晰。
默认字典 (defaultdict
) 的语法
defaultdict
的基本语法如下:
from collections import defaultdict# 创建一个 defaultdict
d = defaultdict(default_factory)
default_factory
是一个工厂函数,用来为不存在的键提供默认值。如果不指定,defaultdict
会默认返回None
。default_factory
可以是任何返回值的函数,比如int()
(返回 0)、list()
(返回空列表)、dict()
(返回空字典)等。
defaultdict
的常见应用场景
1. 计数
- 使用
int
作为default_factory
,可以非常方便地进行计数(例如,统计字符串中各个字符的频率)。
from collections import defaultdicttext = "hello world"
count = defaultdict(int)for char in text:count[char] += 1print(count)
# 输出: defaultdict(<class 'int'>, {'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1})
2. 分组
- 使用
list
或set
作为default_factory
,可以方便地将数据 按某种标准分组。
from collections import defaultdictitems = [('a', 1), ('b', 2), ('a', 3), ('b', 4), ('c', 5)]
grouped = defaultdict(list)for key, value in items:grouped[key].append(value)print(grouped)
# 输出: defaultdict(<class 'list'>, {'a': [1, 3], 'b': [2, 4], 'c': [5]})
3. 嵌套字典
- 使用
dict
作为default_factory
,可以轻松创建嵌套字典结构,避免手动初始化每一层。
from collections import defaultdictnested_dict = defaultdict(lambda: defaultdict(int))# 向字典中添加嵌套元素
nested_dict['a']['x'] = 10
nested_dict['a']['y'] = 20
nested_dict['b']['x'] = 30print(nested_dict)
# 输出: defaultdict(<function <lambda> at 0x7fc7f08d90d0>, {'a': defaultdict(<class 'int'>, {'x': 10, 'y': 20}), 'b': defaultdict(<class 'int'>, {'x': 30})})