如何在 Python 中对 defaultdict 的键进行迭代

PythonBeginner
立即练习

简介

Python 的 defaultdict 是一种强大的数据结构,它简化了处理缺失键的过程。在本教程中,我们将深入探讨在 defaultdict 中迭代键的技巧,让你掌握在 Python 项目中充分发挥其潜力所需的知识。

defaultdict 简介

在 Python 中,defaultdict 是内置 dict 类的一个子类。它提供了一种创建类似字典对象的方式,该对象对于缺失的键具有默认值。当你需要对字典执行操作,且在访问不存在的键时不想担心处理 KeyError 异常时,这会特别有用。

defaultdictcollections 模块中定义,它接受一个可调用对象作为参数。这个可调用对象用于为任何新访问的键提供默认值。

以下是创建一个 defaultdict 的示例:

from collections import defaultdict

## 创建一个默认值为 0 的 defaultdict
d = defaultdict(int)

## 向字典中添加一些值
d['apple'] = 2
d['banana'] = 3

## 访问一个不存在的键
print(d['orange'])  ## 输出: 0

在上述示例中,当我们尝试访问字典中不存在的键 'orange' 时,defaultdict 会自动创建一个新条目,其默认值为 0

defaultdict 可以与各种可调用对象一起使用,例如 listset,甚至是自定义函数,以便为缺失的键提供不同的默认值。

graph TD
    A[创建一个 defaultdict] --> B[指定一个默认值]
    B --> C[向字典中添加值]
    C --> D[访问不存在的键]
    D --> E[自动提供默认值]

通过使用 defaultdict,你可以简化代码,并且无需在访问键之前检查键是否存在。这可以使你的代码更简洁、更易读。

在 defaultdict 中迭代键

defaultdict 中迭代键与在常规字典中迭代键类似。你可以使用相同的方法和技巧来访问键。

以下是几种在 defaultdict 中迭代键的方法:

使用 keys() 方法

from collections import defaultdict

## 创建一个默认值为 0 的 defaultdict
d = defaultdict(int)
d['apple'] = 2
d['banana'] = 3
d['orange'] = 1

## 使用 keys() 方法迭代键
for key in d.keys():
    print(key)

输出:

apple
banana
orange

使用 for 循环

from collections import defaultdict

## 创建一个默认值为 0 的 defaultdict
d = defaultdict(int)
d['apple'] = 2
d['banana'] = 3
d['orange'] = 1

## 使用 for 循环迭代键
for key in d:
    print(key)

输出:

apple
banana
orange

使用 items() 方法

from collections import defaultdict

## 创建一个默认值为 0 的 defaultdict
d = defaultdict(int)
d['apple'] = 2
d['banana'] = 3
d['orange'] = 1

## 使用 items() 方法迭代键和值
for key, value in d.items():
    print(key)

输出:

apple
banana
orange

如你所见,在 defaultdict 中迭代键与在常规字典中迭代键没有区别。defaultdict 的行为与常规字典一样,只是额外提供了为缺失键设置默认值的功能。

defaultdict 的实际应用场景

defaultdict 是一种通用的数据结构,可用于各种场景。以下是 defaultdict 的一些实际应用场景:

统计出现次数

defaultdict 的一个常见应用场景是统计列表或序列中元素的出现次数。通过使用默认值为 0defaultdict,你可以轻松跟踪每个元素的计数。

from collections import defaultdict

## 统计句子中单词的出现次数
sentence = "the quick brown fox jumps over the lazy dog"
word_count = defaultdict(int)
for word in sentence.split():
    word_count[word] += 1

print(dict(word_count))

输出:

{'the': 2, 'quick': 1, 'brown': 1, 'fox': 1, 'jumps': 1, 'over': 1, 'lazy': 1, 'dog': 1}

数据分组

defaultdict 的另一个常见应用场景是根据键对数据进行分组。通过使用默认值为空列表或集合的 defaultdict,你可以轻松地将值追加到相应的列表或集合中。

from collections import defaultdict

## 按成绩对学生进行分组
students = [
    {"name": "Alice", "grade": "A"},
    {"name": "Bob", "grade": "B"},
    {"name": "Charlie", "grade": "A"},
    {"name": "David", "grade": "C"},
    {"name": "Eve", "grade": "B"}
]

grade_groups = defaultdict(list)
for student in students:
    grade_groups[student["grade"]].append(student["name"])

print(dict(grade_groups))

输出:

{'A': ['Alice', 'Charlie'], 'B': ['Bob', 'Eve'], 'C': ['David']}

构建树状和嵌套结构

defaultdict 还可用于构建树状数据结构或嵌套字典。通过使用默认值为另一个 defaultdictdefaultdict,你可以创建一个层次结构数据结构,该结构易于遍历和操作。

from collections import defaultdict

## 构建一个嵌套字典
data = defaultdict(lambda: defaultdict(int))
data["fruits"]["apples"] = 5
data["fruits"]["bananas"] = 3
data["vegetables"]["carrots"] = 10
data["vegetables"]["broccoli"] = 7

print(dict(data))

输出:

{'fruits': {'apples': 5, 'bananas': 3},'vegetables': {'carrots': 10, 'broccoli': 7}}

这些只是 Python 中 defaultdict 实际应用场景的几个示例。通过利用其为缺失键提供默认值的能力,你可以编写更简洁、更健壮的代码,更优雅地处理边界情况。

总结

在本教程结束时,你将扎实地理解如何在 Python 中有效地迭代 defaultdict 中的键。你还将发现这个通用数据结构的实际应用场景,使你能够优化代码并提升解决问题的能力。拥抱 defaultdict 的强大功能,将你的 Python 编程提升到新的高度。