【成人版python基础入门】第二章 字典——智慧的宝典
字典——智慧的宝典
在与 Python 的数据结构冒险中,我们已经学会了如何使用列表记录和管理大量的信息。现在,让我们继续探索一种更为强大的数据结构——字典。字典是一种以键值对形式存储信息的数据结构,它就像是你随身携带的智慧宝典,能够随时提供你需要的帮助。通过这篇教程,你将学会如何创建、访问、添加、删除字典中的元素,并掌握一些常用的字典操作。
字典的基本概念
字典是什么?
字典是 Python 中的一种无序集合,以键值对的形式存储数据。每个键值对都有一个唯一的键(key)和一个对应的值(value)。这就像你在一本宝典中记录了一个个知识点,每个知识点都有一个名字(键),而内容(值)可以是任何类型的数据,如字符串、数字、列表等。
想象一下,你有一本神秘的书,每一页都记录了一个知识点,每个知识点都有一个固定的编号。你可以通过编号快速查找和管理这些知识点,这本神秘的书就是 Python 中的字典。
字典的创建
创建字典非常简单,只需要用花括号 {}
把键值对包起来即可。键值对之间用冒号 :
分隔,多个键值对之间用逗号 ,
分隔。
# 创建一个空字典
my_dict = {}
# 创建一个包含多个键值对的字典
fruit_prices = {
"苹果": 5,
"香蕉": 3,
"橙子": 4
}
这就像你在宝典中创建了一章,记录了不同水果的价格。
访问字典元素
访问字典中的元素,只需要用方括号 []
指定键,就能获取对应的值。
fruit_prices = {
"苹果": 5,
"香蕉": 3,
"橙子": 4
}
# 访问指定键的值
print(fruit_prices["苹果"]) # 输出:5
# 判断键是否存在
if "梨" in fruit_prices:
print(fruit_prices["梨"])
else:
print("梨的价格没有记录。")
这就像你在宝典中查找某个知识点,用编号快速找到它。如果编号不存在,宝典会告诉你这个知识点没有记录。
添加、删除字典元素
添加键值对
添加键值对到字典中,只需要用方括号 []
指定键,并赋予新的值。
fruit_prices = {
"苹果": 5,
"香蕉": 3,
"橙子": 4
}
# 添加新的键值对
fruit_prices["梨"] = 6
print(fruit_prices) # 输出:{'苹果': 5, '香蕉': 3, '橙子': 4, '梨': 6}
这就像你在宝典中新增了一个知识点,赋予它一个编号和内容。
修改键值对
修改字典中的键值对,只需要通过键访问元素并赋予新的值。
fruit_prices = {
"苹果": 5,
"香蕉": 3,
"橙子": 4,
"梨": 6
}
# 修改指定键的值
fruit_prices["橙子"] = 5
print(fruit_prices) # 输出:{'苹果': 5, '香蕉': 3, '橙子': 5, '梨': 6}
这就像你在宝典中更新了一个知识点的内容。
删除键值对
删除字典中的键值对,可以使用 del
语句删除指定的键值对,或者使用 pop()
方法删除并返回指定键的值。
fruit_prices = {
"苹果": 5,
"香蕉": 3,
"橙子": 5,
"梨": 6
}
# 删除指定键值对
del fruit_prices["梨"]
print(fruit_prices) # 输出:{'苹果': 5, '香蕉': 3, '橙子': 5}
# 删除并返回指定键的值
price = fruit_prices.pop("香蕉")
print("香蕉的价格是:", price) # 输出:香蕉的价格是: 3
print(fruit_prices) # 输出:{'苹果': 5, '橙子': 5}
这就像你在宝典中删除了一个知识点,或者把某个知识点的内容记录在另一张纸上,然后从宝典中删除。
常用字典操作
keys()
:获取所有键
keys()
方法返回一个包含字典中所有键的视图对象。
student_grades = {
"Alice": 90,
"Bob": 85,
"Charlie": 95
}
keys = student_grades.keys()
print("所有学生的姓名:", list(keys)) # 输出:所有学生的姓名: ['Alice', 'Bob', 'Charlie']
这就像你在宝典中列出了所有知识点的编号。
values()
:获取所有值
values()
方法返回一个包含字典中所有值的视图对象。
student_grades = {
"Alice": 90,
"Bob": 85,
"Charlie": 95
}
values = student_grades.values()
print("所有学生的成绩:", list(values)) # 输出:所有学生的成绩: [90, 85, 95]
这就像你在宝典中列出了所有知识点的内容。
items()
:获取所有键值对
items()
方法返回一个包含字典中所有键值对的视图对象,每个键值对是一个元组。
student_grades = {
"Alice": 90,
"Bob": 85,
"Charlie": 95
}
items = student_grades.items()
for name, grade in items:
print(name, "的成绩是:", grade)
输出:
Alice 的成绩是: 90
Bob 的成绩是: 85
Charlie 的成绩是: 95
这就像你在宝典中列出了所有知识点的编号和内容。
get()
:安全地获取值
get()
方法用于安全地获取字典中指定键的值。如果键不存在,它会返回一个默认值(可选),而不是抛出异常。
student_grades = {
"Alice": 90,
"Bob": 85,
"Charlie": 95
}
# 安全地获取值
grade = student_grades.get("Dave", 0)
print("Dave 的成绩是:", grade) # 输出:Dave 的成绩是: 0
这就像你在宝典中查找一个未知的知识点,如果找不到,宝典会给出一个默认答案,而不是告诉你查找失败。
update()
:更新字典
update()
方法用于更新字典中的键值对,可以传入另一个字典或键值对列表。
student_grades = {
"Alice": 90,
"Bob": 85,
"Charlie": 95
}
# 更新字典
new_grades = {
"Bob": 92,
"Eve": 88
}
student_grades.update(new_grades)
print(student_grades) # 输出:{'Alice': 90, 'Bob': 92, 'Charlie': 95, 'Eve': 88}
这就像你在宝典中更新了一部分内容,或者添加了新的知识点。
clear()
:清空字典
clear()
方法用于清空字典中的所有键值对。
student_grades = {
"Alice": 90,
"Bob": 85,
"Charlie": 95
}
# 清空字典
student_grades.clear()
print(student_grades) # 输出:{}
这就像你在宝典中删除了所有记录的内容,重新开始。
copy()
:复制字典
copy()
方法用于创建字典的浅拷贝。
student_grades = {
"Alice": 90,
"Bob": 85,
"Charlie": 95
}
# 复制字典
another_grades = student_grades.copy()
print(another_grades) # 输出:{'Alice': 90, 'Bob': 85, 'Charlie': 95}
这就像你在宝典中复制了一部分内容,另存为一个新的宝典。
代码样例:生成一个随机的成语接龙游戏
假设你想编写一个成语接龙游戏,通过字典存储成语及其解释。每次游戏开始时,程序会随机选择一个成语作为起点,然后用户需要依次输入成语,要求成语的首字与前一个成语的末字相同。如果输入的成语正确,程序会显示其解释;如果输入错误,程序会提示重新输入。
代码实现
import random
# 成语和其解释的字典
idiom_dict = {
"百折不挠": "形容意志坚强,屡遭挫折而不屈服。",
"不计前嫌": "不追究过去的怨恨。",
"嫌贫爱富": "喜欢富人而不喜欢穷人。",
"富可敌国": "形容非常富有。",
"国色天香": "形容女性或花朵极其美丽。",
"香消玉殒": "形容美女或名花的死亡或消逝。",
"殒身不恤": "不惜牺牲自己。"
}
# 随机选择一个成语作为起点
start_idiom = random.choice(list(idiom_dict.keys()))
print("游戏开始,起点成语是:", start_idiom)
# 记录当前成语的末字
current_last_char = start_idiom[-1]
# 游戏循环
while True:
# 用户输入下一个成语
next_idiom = input(f"请输入一个首字为 '{current_last_char}' 的成语: ")
# 判断输入的成语是否正确
if next_idiom in idiom_dict and next_idiom[0] == current_last_char:
print(idiom_dict[next_idiom])
current_last_char = next_idiom[-1]
else:
print("输入的成语不正确或不存在,请重新输入。")
continue
# 判断是否继续游戏
continue_game = input("继续游戏吗?(y/n): ")
if continue_game.lower() == 'n':
break
print("游戏结束,谢谢参与!")
代码详解
-
成语字典:
idiom_dict = { "百折不挠": "形容意志坚强,屡遭挫折而不屈服。", "不计前嫌": "不追究过去的怨恨。", "嫌贫爱富": "喜欢富人而不喜欢穷人。", "富可敌国": "形容非常富有。", "国色天香": "形容女性或花朵极其美丽。", "香消玉殒": "形容美女或名花的死亡或消逝。", "殒身不恤": "不惜牺牲自己。" }
创建一个字典
idiom_dict
,其中每个键是一个成语,对应的值是该成语的解释。 -
随机选择起点成语:
start_idiom = random.choice(list(idiom_dict.keys())) print("游戏开始,起点成语是:", start_idiom)
使用
random.choice()
函数从字典的键中随机选择一个成语作为起点,并输出。 -
游戏循环:
current_last_char = start_idiom[-1] while True: # 用户输入下一个成语 next_idiom = input(f"请输入一个首字为 '{current_last_char}' 的成语: ") # 判断输入的成语是否正确 if next_idiom in idiom_dict and next_idiom[0] == current_last_char: print(idiom_dict[next_idiom]) current_last_char = next_idiom[-1] else: print("输入的成语不正确或不存在,请重新输入。") continue # 判断是否继续游戏 continue_game = input("继续游戏吗?(y/n): ") if continue_game.lower() == 'n': break
- 记录当前成语的末字:
current_last_char
存储当前成语的末字。 - 用户输入成语:使用
input()
函数获取用户输入的成语。 - 判断输入的成语是否正确:通过
if
语句检查用户输入的成语是否存在于字典中,并且其首字是否与当前成语的末字相同。如果正确,输出成语的解释,并更新current_last_char
;如果不正确,提示重新输入。 - 判断是否继续游戏:使用
if
语句判断用户是否想要继续游戏。如果输入 ‘n’,结束循环并退出游戏。
- 记录当前成语的末字:
-
游戏结束提示:
print("游戏结束,谢谢参与!")
游戏结束后,输出感谢信息。
运行结果
假设你运行了上面的代码,程序会随机选择一个成语作为起点,例如 “百折不挠”。然后,程序会提示你输入一个首字为 “挠” 的成语。例如:
游戏开始,起点成语是: 百折不挠
请输入一个首字为 '挠' 的成语: 挠痒痒
输入的成语不正确或不存在,请重新输入。
请输入一个首字为 '挠' 的成语: 不计前嫌
不追究过去的怨恨。
继续游戏吗?(y/n): y
请输入一个首字为 '嫌' 的成语: 嫌贫爱富
喜欢富人而不喜欢穷人。
继续游戏吗?(y/n): n
游戏结束,谢谢参与!
摘要
通过这一篇的学习,你已经掌握了如何使用 Python 的字典,管理你想保存的信息。字典是一种强大的数据结构,允许你以键值对的形式存储数据,就像是随身携带的智慧宝典,随时提供帮助。
- 创建与访问:使用花括号
{}
创建字典,通过键[]
访问字典中的值。 - 增删字典元素:使用
[]
添加新的键值对,通过del
语句或pop()
方法删除指定的键值对,并使用[]
修改键值对。 - 常用字典操作:学会了常用的字典方法,如
keys()
、values()
、items()
、get()
、update()
、clear()
和copy()
。 - 代码样例:生成了一个随机的成语接龙游戏,通过字典存储成语及其解释,展示了字典在实际应用中的强大功能。
希望这篇教程能为你与 Python 的旅途带来更多的乐趣和信心。继续前行,探索更多数据结构和编程技巧,让我们一起用 Python 编写出更多有用和有趣的应用。🔍✨
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)