python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python defaultdict方法使用

Python中defaultdict方法常见的使用方法及问题解答

作者:余弦的倒数

Python defaultdict 是 collections 模块的 dict 子类,自动处理缺失键,这篇文章主要介绍了Python中defaultdict方法常见的使用方法及问题解答,文中通过代码介绍的非常详细,需要的朋友可以参考下

前言

在 Python 中, defaultdict 是 collections 模块提供的一个非常有用的类,它是内置字典类型 dict 的子类。 defaultdict 的主要特点是 自动处理字典中不存在的键,避免在使用普通字典时因访问不存在的键而抛出 KeyError 异常。

核心特点

基本语法

from collections import defaultdict

d = defaultdict(default_factory)

常见使用场景

1. 分组数据(默认值为列表)

将数据按键分组,类似 SQL 的 GROUP BY

from collections import defaultdict

data = [("apple", "fruit"), ("carrot", "vegetable"), ("apple", "fruit")]
grouped = defaultdict(list)

for name, category in data:
    grouped[category].append(name)

print(grouped)
# 输出:defaultdict(<class 'list'>, {'fruit': ['apple', 'apple'], 'vegetable': ['carrot']})

2. 计数(默认值为整数)

统计元素出现次数:

from collections import defaultdict

text = "apple banana apple orange banana"
words = text.split()
count = defaultdict(int)

for word in words:
    count[word] += 1

print(count)
# 输出:defaultdict(<class 'int'>, {'apple': 2, 'banana': 2, 'orange': 1})

3. 集合操作(默认值为集合)

避免重复值:

from collections import defaultdict

pairs = [("a", 1), ("b", 2), ("a", 3)]
unique = defaultdict(set)

for key, value in pairs:
    unique[key].add(value)

print(unique)
# 输出:defaultdict(<class 'set'>, {'a': {1, 3}, 'b': {2}})

4. 嵌套字典

构建多层嵌套结构:

from collections import defaultdict

nested = defaultdict(lambda: defaultdict(int))
nested["fruit"]["apple"] += 1
nested["vegetable"]["carrot"] += 2

print(nested["fruit"])        # 输出:defaultdict(<class 'int'>, {'apple': 1})
print(nested["unknown_key"])  # 输出:defaultdict(<class 'int'>, {})

注意事项

与普通字典对比

# 普通字典需要手动处理缺失键
d = {}
key = "unknown"
if key not in d:
    d[key] = []
d[key].append(1)

# defaultdict 自动处理
d = defaultdict(list)
d["unknown"].append(1)

总结

defaultdict 简化了需要初始化默认值的字典操作,特别适合数据聚合、分组和统计场景。通过合理选择 default_factory(如 listintset 或自定义函数),可以大幅提升代码简洁性和可读性。

在 Python 中,defaultdict 继承自 dict,因此它的 键(Key)和值(Value)的类型规则与普通字典一致,但也有一些细节需要注意。以下是详细说明:

1. 键(Key)的类型

2. 值(Value)的类型

3. default_factory 的返回值

default_factory 是一个可调用对象(如 listint 或自定义函数),它决定了 当键不存在时,默认值的类型。例如:

值的类型完全由 default_factory 决定,与键的类型无关

4. 嵌套 defaultdict 的键值

可以创建多层嵌套的 defaultdict,键的规则依然适用:

from collections import defaultdict

# 嵌套 defaultdict(值类型是另一个 defaultdict)
nested = defaultdict(lambda: defaultdict(int))

# 合法操作
nested["fruit"]["apple"] += 1      # 键为 "fruit"(字符串)和 "apple"(字符串)
nested[123][(4, 5)] = 2           # 键为 123(整数)和 (4, 5)(不可变元组)

# 非法操作(内层键非法)
nested["data"][[1, 2]] = 3        # 内层键为列表,不可哈希 ❌

5. 键和值的可变性总结

特性键(Key)值(Value)
类型限制必须不可变且可哈希可以是任意类型
可变性不可变可以可变
示例intstrtuplelistdict, 自定义对象

常见问题解答

Q1:可以用 list 作为键吗?

Q2:可以用 defaultdict 作为键吗?

Q3:值可以是函数或类吗?

总结

到此这篇关于Python中defaultdict方法常见的使用方法及问题解答的文章就介绍到这了,更多相关Python defaultdict方法使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文