查看全课大纲(第 25 / 51 节)
- 1.Python 是什么?为什么值得学?
- 2.如何为 Python 编程准备一个“全家桶”环境?
- 3.Python 有哪几种执行方法?
- 4.行与缩进到底有什么用?
- 5.注释有什么用,怎么写?
- 6.变量:如何给数据起个好名字?
- 7.运算符的优先级和常见坑点是什么?
- 8.Python 中,数字和布尔值究竟有哪几种?
- 9.输入函数 `input()` 和文件读取 `open()` 怎么用?
- 10.如何将程序的结果展示给用户或保存下来?
- 11.CSV 文件怎么读怎么写才方便?
- 12.列表是什么,如何创建和访问它?
- 13.列表的修改操作,有哪些方法?
- 14.列表切片为什么能取到部分元素?排序和查找又该怎么用?
- 15.判断语句:如何让程序根据条件做不同的事?
- 16.for 循环如何遍历序列中的元素?
- 17.while 循环什么时候才会停?
- 18.while 循环的结束条件,你写对了吗?
- 19.循环中途想提前结束,怎么办?
- 20.`break` 和 `continue` 到底有什么区别?
- 21.列表推导式如何让代码更简洁高效?
- 22.字符串怎么定义、拼接和操作?
- 23.元组:为什么定义单个元素时要加逗号?
- 24.集合(set)怎么用?如何快速去重和做集合运算?
- 25.字典是什么,为什么比列表更方便?
- 26.字典的增删改查与遍历,如何避免 KeyError?
- 27.函数里的变量,为什么有的能用有的不能用?
- 28.在函数内部修改全局变量,为什么有时不生效?
- 29.函数里能修改全局变量吗?返回值怎么用?
- 30.匿名函数:如何用 lambda 快速定义简单函数?
- 31.面向对象编程是什么,为什么需要它?
- 32.类中的方法和属性到底怎么定义和使用?
- 33.如何控制对对象内部属性和方法的访问?
- 34.异常发生时,程序会怎样继续执行?
- 35.如何组织代码:包和模块
- 36.`if __name__ == '__main__'` 到底有什么用?
- 37.如何用 IDE 的 Debug 功能排查程序错误?
- 38.Matplotlib 绘图的第一步该做什么?
- 39.Figure 是什么,如何设置图形尺寸?
- 40.如何自定义 Matplotlib 的坐标轴?
- 41.如何为图表添加图例,让不同曲线一目了然?
- 42.饼图怎么画才能直观展示数据占比?
- 43.如何用 Matplotlib 绘制散点图?
- 44.柱状图怎么画?
- 45.如何使用 Matplotlib 绘制等高线图?
- 46.如何在 Matplotlib 中绘制子图?
- 47.zip 函数如何把多个列表“打包”在一起?
- 48.如何给可迭代对象加上索引?
- 49.random 模块如何生成随机数?
- 50.math 模块怎么用?
- 51.Counter 如何快速统计元素出现次数?
字典是什么,为什么比列表更方便?
约 5 分钟
小象实战讲义 · Python 编程从入门到实践
在学习了列表和元组之后,我们遇到了一种新的数据结构需求:如何更直观地存储和查找一组有明确“标签”的数据?例如,存储一个人的信息,我们希望直接通过“姓名”、“年龄”这样的标签来获取对应的值,而不是去记忆它们在列表中的位置。本节将介绍字典(dict),一种通过“键-值对”存储数据的工具,并对比它与列表在修改数据时的差别。
💡 核心导读
- 字典定义:使用花括号
{},内部以键: 值的形式定义元素。 - 核心优势:通过唯一的“键”来访问对应的“值”,无需记忆下标,更直观。
- 基本操作:通过
字典[键]访问和修改值。
字典的创建与访问
字典(dict)是 Python 中一种可变的映射类型。它存储的是键值对(key-value pair):冒号前面是键(key),冒号后面是值(value)。我们可以通过查询键来找到对应的值。
定义字典
字典用花括号 {} 定义,元素之间用逗号分隔。每个元素是一个 键: 值 对,键和值之间用冒号 : 分隔。
# 定义一个存储用户信息的字典
user_info = {"name": "悟空", "age": 100, "gender": "male", "job": "取经"}
print(user_info){'name': '悟空', 'age': 100, 'gender': 'male', 'job': '取经'}为什么用字典?一个对比示例
先用列表存储同样的信息:要把“工作内容”从“取经”改成“取经|偷桃”,必须先知道它在列表中的下标是 3。
user_info_list = ["悟空", 100, "male", "取经"]
# 修改"工作内容",需要知道它在列表中的下标是3
user_info_list[3] = "取经|偷桃"
print(user_info_list)['悟空', 100, 'male', '取经|偷桃']使用字典,操作则直观得多:直接通过键 "job" 定位并修改,不需要去数下标。
user_info = {"name": "悟空", "age": 100, "gender": "male", "job": "取经"}
# 直接通过键"job"来修改其值
user_info["job"] = "取经|偷桃"
print(user_info["job"])取经|偷桃当数据量很大或结构复杂时,通过有意义的键名(如 "job")访问,远比记忆数字下标(如 3)要方便和可靠。
那如果在定义字典时,给同一个键写入了两个不同的值,通过这个键查到的是哪一个值呢?可以先按自己的直觉判断一下。
📝 动手练一练
假设你正在管理一个简单的学生成绩单,用字典来存储每个学生的姓名和对应的分数。
- 创建一个字典
scores,包含以下数据:{"张三": 85, "李四": 92, "王五": 78}。 - 查询并打印出“李四”的成绩。
- 发现“王五”的成绩登记有误,实际是88分,请修改字典。
👉 点击查看参考答案
思路:按照字典的创建、查询、修改操作依次进行即可,注意键名要与定义时完全一致。
# 1. 创建字典
scores = {"张三": 85, "李四": 92, "王五": 78}
print("初始成绩单:", scores)
# 2. 查询李四的成绩
print("李四的成绩是:", scores["李四"])
# 3. 修改王五的成绩
scores["王五"] = 88
print("修改王五成绩后:", scores)初始成绩单: {'张三': 85, '李四': 92, '王五': 78}
李四的成绩是: 92
修改王五成绩后: {'张三': 85, '李四': 92, '王五': 88}常见错误
| 错误写法 | 现象或报错 | 原因 | 正确写法 |
|---|---|---|---|
user_info = {name: "悟空"} | NameError: name 'name' is not defined | 键 name 被当成变量,但并没有定义这个变量。字符串键必须加引号。 | user_info = {"name": "悟空"} |
print(user_info[0]) | KeyError: 0 | 字典通过键查值,不支持按位置下标访问,0 在这里被当成一个不存在的键。 | 用键访问:print(user_info["name"]) |
user_info["job "] = "偷桃"(键名多了空格) | 没有改到原来的 "job",字典里反而多出一项 | 字典按键的完整内容匹配,键名多一个空格就是另一个键。 | 键名与定义时保持一致:user_info["job"] = "偷桃" |
小结
- 字典用于存储键值对数据,通过键来访问值,比列表的下标访问更直观。
- 字典用花括号
{}定义,元素格式为键: 值,元素之间用逗号分隔。 - 使用
字典[键]可以查询或修改对应的值。 - 键名必须与定义时完全一致,多一个空格或大小写不同都会被当成另一个键。
📋 行动清单
- 将本节“动手练一练”的代码自己敲一遍,并试着把查询的键改成不存在的键,观察报错信息。
- 思考一下,如果要用字典存储一个班级所有学生的多门课成绩(如语文、数学),字典的结构可以怎么设计?(例如,键是学生姓名,值是一个包含成绩的列表或另一个字典)
- 在 Python 交互环境中,定义一个存储你自己姓名、年龄、城市的字典,并用
print(my_dict)查看结果。
—— 小象教研组
配套资料 · 直接下载
课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。
- 下载第3章代码包:字典(含1 个 Notebook)ZIP · 2KB