第十四课:有“标签”的数据 – 字典 (Dictionary)
- 时长: 90 分钟
- 教学目标:
- 理解“字典”的概念:一种通过“标签”(键 Key)来查找对应“值”(Value)的数据结构。
- 理解字典和列表的区别:列表按顺序(索引)查找,字典按标签(键)查找。
- 学会创建字典
{}
。 - 掌握如何通过“键”来访问、修改字典里的“值”。
- 学习向字典中添加新的“键值对”。
- 学习从字典中删除“键值对”。
- 学会获取字典中所有的“键”、“值”或“键值对”。
- 学习使用
in
运算符检查字典中是否存在某个“键”。
课程内容
1. 复习与引入 (10 分钟)
- 复习: 快速回顾列表的使用(通过索引找数据)和函数的定义调用。
- 提出问题: 老师提问:“我们用列表存储了一系列的分数
[85, 92, 78]
。如果我想知道某个同学(比如‘小明’)的分数是多少,我怎么知道 85 分是小明的呢?我们不能直接用名字去列表里找,列表只能用索引找。” - 引出字典: 在现实生活中,我们有很多数据是有关联的,比如:每个学生的学号对应一个名字,每种商品有一个名字对应一个价格,每个单词对应它的解释。列表用数字编号来找东西,但如果我想用一个有意义的“标签”(比如名字、学号、商品名)来找到它关联的数据,就需要一种新的数据结构——字典 (Dictionary)。字典就像一本真正的字典,通过查找单词(键),找到对应的解释(值)。
2. 什么是字典?如何创建? (15 分钟)
- 概念: 字典是无序的(在较老的 Python 版本中是无序的,新版本有顺序,但我们通常不依赖它的顺序),由一系列“键值对” (Key-Value Pair) 组成。每个“键”是唯一的,通过“键”可以快速找到它对应的“值”。
- 打个比方: 字典就像:
- 电话簿:名字 (键) → 电话号码 (值)。
- 班级花名册:学号 (键) → 学生信息 (值)。
- 菜单:菜名 (键) → 价格 (值)。
- 创建语法: 使用花括号
{}
来创建字典。每个键值对写成键: 值
的形式,不同的键值对之间用逗号,
分隔。# 创建一个空的字典 empty_dict = {} # 创建一个存放学生分数的字典 (键是名字,值是分数) student_scores = {"小明": 85, "小红": 92, "小刚": 78} # 创建一个存放商品价格的字典 (键是商品名,值是价格) product_prices = {"苹果": 2.5, "面包": 5.0, "鸡蛋": 1.2} # 字典的键可以是字符串或数字等不可变类型,值可以是任意类型 my_dict = {"name": "Python", 1: [1, 2, 3], "info": {"version": 3.10}} # 打印字典 print(student_scores) print(product_prices) print(my_dict)
- 键的特点: 字典的“键”必须是唯一的,而且必须是不可变的类型(比如字符串、数字、元组)。通常我们用字符串作为键。
- 值的特点: 字典的“值”可以是任意类型,可以重复。
3. 访问和修改字典的值 (15 分钟)
- 访问值: 使用方括号
[]
和对应的键来访问字典里的值。student_scores = {"小明": 85, "小红": 92, "小刚": 78} print(student_scores["小明"]) # 通过键 "小明" 访问对应的值 85 print(student_scores["小刚"]) # 通过键 "小刚" 访问对应的值 78 # 如果尝试访问一个不存在的键,会报错! # print(student_scores["小丽"]) # 错误!键 "小丽" 不存在
- 修改值: 通过键访问到对应的值后,可以直接使用
=
重新赋值来修改。student_scores = {"小明": 85, "小红": 92, "小刚": 78} print("修改前:", student_scores) student_scores["小明"] = 90 # 把 "小明" 的分数改成 90 print("修改后:", student_scores) # 结果是 {"小明": 90, "小红": 92, "小刚": 78}
- 动手实践: 学生创建一个字典(比如记录家庭成员的姓名和年龄),尝试通过姓名访问年龄,并尝试修改其中某个成员的年龄。
4. 往字典里添加和删除“键值对” (15 分钟)
- 添加键值对: 使用方括号
[]
和一个新的键,给它赋予一个值,就可以添加一对新的键值对。student_scores = {"小明": 85, "小红": 92} print("添加前:", student_scores) student_scores["小刚"] = 78 # 添加新的键值对 "小刚": 78 student_scores["小丽"] = 95 # 添加新的键值对 "小丽": 95 print("添加后:", student_scores) # 结果是 {"小明": 85, "小红": 92, "小刚": 78, "小丽": 95}
注意:如果键已经存在,这种方法会直接修改对应的值(和上面的修改操作一样)。
- 删除键值对: 使用
del
关键字加上字典名和要删除的键字典名[键]
。student_scores = {"小明": 85, "小红": 92, "小刚": 78} print("删除前:", student_scores) del student_scores["小红"] # 删除键为 "小红" 的键值对 print("删除后:", student_scores) # 结果是 {"小明": 85, "小刚": 78} # 如果尝试删除一个不存在的键,会报错! # del student_scores["小芳"] # 错误!
(可选:简单介绍
.pop(键)
方法删除并返回指定键的值:removed_score = student_scores.pop("小刚")
) - 动手实践: 学生创建一个字典,尝试添加新的键值对。 尝试删除字典中的某个键值对。
5. 获取字典的“键”、“值”和“项目” (15 分钟)
.keys()
: 获取字典中所有的键。返回一个“视图对象”,可以转换为列表。student_scores = {"小明": 85, "小红": 92, "小刚": 78} keys_view = student_scores.keys() print(keys_view) # 输出类似 dict_keys(['小明', '小红', '小刚']) print(list(keys_view)) # 转换为列表 ['小明', '小红', '小刚']
.values()
: 获取字典中所有的值。返回一个“视图对象”,可以转换为列表。values_view = student_scores.values() print(values_view) # 输出类似 dict_values([85, 92, 78]) print(list(values_view)) # 转换为列表 [85, 92, 78]
.items()
: 获取字典中所有的键值对。每个键值对表示为一个元组(键, 值)
。返回一个“视图对象”,可以转换为列表。items_view = student_scores.items() print(items_view) # 输出类似 dict_items([('小明', 85), ('小红', 92), ('小刚', 78)]) print(list(items_view)) # 转换为列表 [('小明', 85), ('小红', 92), ('小刚', 78)]
- 检查键是否存在 –
in
: 使用in
运算符可以快速检查一个键是否在字典中。student_scores = {"小明": 85, "小红": 92} print("小明" in student_scores) # True print("小丽" in student_scores) # False # 注意:in 默认是检查键,不是检查值 print(85 in student_scores) # False (检查的是键 85 是否存在) print(85 in student_scores.values()) # True (检查值 85 是否存在)
- 动手实践: 学生创建一个字典,分别获取它的键、值和键值对,并打印出来。 使用
in
检查某个键是否存在。
6. 遍历字典 (10 分钟)
- 默认遍历 (遍历键): 使用
for
循环直接遍历字典,默认是遍历字典的键。student_scores = {"小明": 85, "小红": 92, "小刚": 78} print("--- 遍历键 ---") for name in student_scores: # name 会依次是 "小明", "小红", "小刚" print(name)
- 遍历值: 结合
.values()
方法遍历字典的值。print("--- 遍历值 ---") for score in student_scores.values(): # score 会依次是 85, 92, 78 print(score)
- 遍历键值对: 结合
.items()
方法遍历字典的键值对。在for
循环中使用两个变量来接收键和值。print("--- 遍历键值对 ---") for name, score in student_scores.items(): # name 接收键,score 接收值 print(name, "的分数是", score)
- 动手实践: 学生创建一个字典,分别演示如何遍历它的键、值和键值对。
7. 课堂练习 (10 分钟)
让学生独立完成以下练习:
- 练习 1: 创建一个字典,存放你喜欢的 3 种水果的名字和它们的颜色(键是水果名,值是颜色)。
- 打印出“苹果”的颜色。
- 向字典中添加一种新的水果和颜色。
- 删除字典中的“香蕉”。
- 打印修改后的字典。
# 在这里创建你的字典 fruits_color = {"apple": "red", ...} # TODO: 访问并打印苹果的颜色 # TODO: 添加新的水果和颜色 # TODO: 删除香蕉 # TODO: 打印最终字典
- 练习 2: 创建一个字典,存放一些城市的名字和它们的人口数量。使用
for
循环遍历字典,打印出每个城市的名字和对应的人口数量。 - 练习 3: 创建一个字典,存放商品的名称和价格。让用户输入一个商品名称,如果字典中有这个商品,就打印它的价格;如果商品不存在,就打印“抱歉,我们没有这个商品。”(提示:使用
in
运算符检查键是否存在)。
8. 总结与提问 (5 分钟)
- 回顾: 回顾本节课内容:字典的概念(键值对,通过键查找),字典和列表的区别,创建字典
{}
,访问/修改值字典[键]
,添加键值对字典[新键] = 新值
,删除键值对del 字典[键]
,获取键/值/项目 (.keys()
,.values()
,.items()
),检查键是否存在键 in 字典
,遍历字典(默认遍历键,遍历值.values()
,遍历键值对.items()
)。 - 提问:
- 字典和列表有什么主要区别?
- 字典是用什么符号创建的?列表呢?
- 如何获取字典
my_dict = {"a": 1, "b": 2}
中键为 “b” 的值? - 如何向字典中添加一对新的键值对 “c”: 3?
key in my_dict
是检查键还是检查值是否存在?- 如何遍历字典,同时获取所有的键和对应的值?
- 答疑: 回答学生问题。
9. 布置课后作业 (5 分钟)
- 作业 1: 创建一个字典,存放你同学或家人的英文名字和他们的中文名字。使用
for
循环遍历字典,打印出每一对名字:“[英文名] 的中文名字是 [中文名]”。 - 作业 2: 创建一个字典,存放一些国家的名字和它们的首都是什么。让用户输入一个国家的名字,打印出它的首都。如果用户输入的国家不在字典中,提示用户“抱歉,字典中没有这个国家的信息。”
- 作业 3: 编写一个程序,创建一个字典,存放一些物品的名称和它们的数量。
- 计算并打印所有物品的总数量。(提示:遍历字典的值并求和)。
- 找出数量大于 10 的物品,打印它们的名称和数量。
- 作业 4: (选做) 编写一个简单的电话簿程序。使用一个字典来存储姓名和电话号码。提供功能让用户选择:添加联系人、查找联系人(根据姓名查找号码)、删除联系人、显示所有联系人、退出。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)