Python - 嵌套字典

你好,有抱负的程序员!今天,我们将深入探讨 Python 中的嵌套字典这一神奇世界。如果你是编程新手,不用担心 - 我会一步一步地引导你学习这个主题,就像我这么多年来为无数学生做的那样。所以,拿上你最喜欢的饮料,放松一下,让我们一起踏上这个 Python 冒险之旅吧!

Python - Nested Dictionaries

嵌套字典

嵌套字典是什么?

想象你有一个大盒子(主字典),在这个大盒子里,你有几个小盒子(嵌套字典)。每个小盒子都可以包含各种物品(键值对)。本质上,嵌套字典就是一个字典里面嵌套了另一个字典。

让我们从一个简单的例子开始:

student = {
"name": "Alice",
"age": 20,
"grades": {
"math": 95,
"science": 88,
"history": 92
}
}

在这个例子中,student 是我们的主字典。它包含了关于 Alice 的基本信息,包括一个嵌套字典 grades,它保存了她不同科目的成绩。

在 Python 中创建嵌套字典

创建嵌套字典与创建普通字典类似,但你需要添加另一个字典作为值。让我们创建一个更复杂的例子 - 学校目录:

school = {
"九年级": {
"Alice": {
"age": 14,
"subjects": ["数学", "科学", "英语"]
},
"Bob": {
"age": 15,
"subjects": ["历史", "艺术", "体育"]
}
},
"十年级": {
"Charlie": {
"age": 16,
"subjects": ["物理", "化学", "生物"]
}
}
}

这里,我们有一个主字典 school,它包含年级作为键。每个年级是另一个包含学生姓名作为键的字典。每个学生都有自己的包含个人信息的字典。

在 Python 中向嵌套字典中添加项目

向嵌套字典中添加项目很简单。你可以向现有的嵌套字典中添加新的键值对,或者创建全新的嵌套字典。

让我们向十年级添加一个新学生:

school["十年级"]["Diana"] = {
"age": 15,
"subjects": ["数学", "计算机科学", "文学"]
}

print(school["十年级"])

输出:

{
'Charlie': {'age': 16, 'subjects': ['物理', '化学', '生物']},
'Diana': {'age': 15, 'subjects': ['数学', '计算机科学', '文学']}
}

我们也可以添加一个新的年级:

school["十一年级"] = {
"Eve": {
"age": 17,
"subjects": ["经济学", "心理学", "法语"]
}
}

print(school.keys())

输出:

dict_keys(['九年级', '十年级', '十一年级'])

在 Python 中访问嵌套字典的项目

要访问嵌套字典中的项目,我们使用多个方括号,每个方括号代表一个嵌套级别。让我们从我们的 school 字典中获取一些信息:

# 获取 Alice 的年龄
alice_age = school["九年级"]["Alice"]["age"]
print(f"Alice 的年龄:{alice_age}")

# 获取 Charlie 的科目
charlie_subjects = school["十年级"]["Charlie"]["subjects"]
print(f"Charlie 的科目:{charlie_subjects}")

输出:

Alice 的年龄:14
Charlie 的科目:['物理', '化学', '生物']

记住,如果你不确定你的嵌套字典的结构,你可以总是使用 get() 方法来避免 KeyError 异常:

# 尝试获取一个不存在的学生
frank_age = school.get("九年级", {}).get("Frank", {}).get("age", "未找到")
print(f"Frank 的年龄:{frank_age}")

输出:

Frank 的年龄:未找到

从嵌套字典中删除字典

要移除嵌套字典,我们使用 del 关键字。让我们从九年级中删除 Bob:

del school["九年级"]["Bob"]
print(school["九年级"])

输出:

{'Alice': {'age': 14, 'subjects': ['数学', '科学', '英语']}}

在从嵌套字典中删除项目时要注意。始终确保键存在,以避免 KeyError 异常。

在 Python 中遍历嵌套字典

遍历嵌套字典需要嵌套循环。让我们打印出我们的 school 字典中的所有信息:

for grade, students in school.items():
print(f"\n{grade}:")
for student, info in students.items():
print(f"  {student}:")
for key, value in info.items():
print(f"    {key}:{value}")

输出:

九年级:
Alice:
age:14
subjects:['数学', '科学', '英语']

十年级:
Charlie:
age:16
subjects:['物理', '化学', '生物']
Diana:
age:15
subjects:['数学', '计算机科学', '文学']

十一年级:
Eve:
age:17
subjects:['经济学', '心理学', '法语']

这个嵌套循环结构允许我们访问和打印出我们嵌套字典的所有层级。

用于处理嵌套字典的方法

以下是用于处理嵌套字典的一些有用方法的表格:

方法 描述
dict.items() 返回一个包含字典键值对的视图对象
dict.keys() 返回一个包含字典键的视图对象
dict.values() 返回一个包含字典值的视图对象
dict.get(key, default) 如果存在指定的键,则返回该键的值,否则返回默认值
dict.update(other_dict) 用来自另一个字典或键值对可迭代对象的元素更新字典
dict.pop(key, default) 删除并返回指定键的值。如果键不存在,则返回默认值

请记住,这些方法可以应用于嵌套字典的任何层级。

你已经掌握了,我亲爱的学生们!我们已经探讨了 Python 中嵌套字典的方方面面。从创建和添加项目到访问、删除和遍历,你现在拥有了处理这些复杂数据结构的工具。

就像任何编程概念一样,实践是关键。尝试创建自己的嵌套字典,比如数字图书馆目录或食谱书。你与这些结构玩得越多,你就越能适应。

记住,在编程世界中,错误只是学习的机会。所以,不要害怕实验和犯错 - 这就是我们所有人作为程序员成长的方式。继续编码,继续学习,最重要的是,享受 Python 带来的乐趣!

Credits: Image by storyset