查看全课大纲(第 25 / 51 节)
  1. 1.Python 是什么?为什么值得学?
  2. 2.如何为 Python 编程准备一个“全家桶”环境?
  3. 3.Python 有哪几种执行方法?
  4. 4.行与缩进到底有什么用?
  5. 5.注释有什么用,怎么写?
  6. 6.变量:如何给数据起个好名字?
  7. 7.运算符的优先级和常见坑点是什么?
  8. 8.Python 中,数字和布尔值究竟有哪几种?
  9. 9.输入函数 `input()` 和文件读取 `open()` 怎么用?
  10. 10.如何将程序的结果展示给用户或保存下来?
  11. 11.CSV 文件怎么读怎么写才方便?
  12. 12.列表是什么,如何创建和访问它?
  13. 13.列表的修改操作,有哪些方法?
  14. 14.列表切片为什么能取到部分元素?排序和查找又该怎么用?
  15. 15.判断语句:如何让程序根据条件做不同的事?
  16. 16.for 循环如何遍历序列中的元素?
  17. 17.while 循环什么时候才会停?
  18. 18.while 循环的结束条件,你写对了吗?
  19. 19.循环中途想提前结束,怎么办?
  20. 20.`break` 和 `continue` 到底有什么区别?
  21. 21.列表推导式如何让代码更简洁高效?
  22. 22.字符串怎么定义、拼接和操作?
  23. 23.元组:为什么定义单个元素时要加逗号?
  24. 24.集合(set)怎么用?如何快速去重和做集合运算?
  25. 25.字典是什么,为什么比列表更方便?
  26. 26.字典的增删改查与遍历,如何避免 KeyError?
  27. 27.函数里的变量,为什么有的能用有的不能用?
  28. 28.在函数内部修改全局变量,为什么有时不生效?
  29. 29.函数里能修改全局变量吗?返回值怎么用?
  30. 30.匿名函数:如何用 lambda 快速定义简单函数?
  31. 31.面向对象编程是什么,为什么需要它?
  32. 32.类中的方法和属性到底怎么定义和使用?
  33. 33.如何控制对对象内部属性和方法的访问?
  34. 34.异常发生时,程序会怎样继续执行?
  35. 35.如何组织代码:包和模块
  36. 36.`if __name__ == '__main__'` 到底有什么用?
  37. 37.如何用 IDE 的 Debug 功能排查程序错误?
  38. 38.Matplotlib 绘图的第一步该做什么?
  39. 39.Figure 是什么,如何设置图形尺寸?
  40. 40.如何自定义 Matplotlib 的坐标轴?
  41. 41.如何为图表添加图例,让不同曲线一目了然?
  42. 42.饼图怎么画才能直观展示数据占比?
  43. 43.如何用 Matplotlib 绘制散点图?
  44. 44.柱状图怎么画?
  45. 45.如何使用 Matplotlib 绘制等高线图?
  46. 46.如何在 Matplotlib 中绘制子图?
  47. 47.zip 函数如何把多个列表“打包”在一起?
  48. 48.如何给可迭代对象加上索引?
  49. 49.random 模块如何生成随机数?
  50. 50.math 模块怎么用?
  51. 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)要方便和可靠。

那如果在定义字典时,给同一个键写入了两个不同的值,通过这个键查到的是哪一个值呢?可以先按自己的直觉判断一下。

📝 动手练一练

假设你正在管理一个简单的学生成绩单,用字典来存储每个学生的姓名和对应的分数。

  1. 创建一个字典 scores,包含以下数据:{"张三": 85, "李四": 92, "王五": 78}。
  2. 查询并打印出“李四”的成绩。
  3. 发现“王五”的成绩登记有误,实际是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"] = "偷桃"

小结

  1. 字典用于存储键值对数据,通过键来访问值,比列表的下标访问更直观。
  2. 字典用花括号 {} 定义,元素格式为 键: 值,元素之间用逗号分隔。
  3. 使用 字典[键] 可以查询或修改对应的值。
  4. 键名必须与定义时完全一致,多一个空格或大小写不同都会被当成另一个键。

📋 行动清单

  • 将本节“动手练一练”的代码自己敲一遍,并试着把查询的键改成不存在的键,观察报错信息。
  • 思考一下,如果要用字典存储一个班级所有学生的多门课成绩(如语文、数学),字典的结构可以怎么设计?(例如,键是学生姓名,值是一个包含成绩的列表或另一个字典)
  • 在 Python 交互环境中,定义一个存储你自己姓名、年龄、城市的字典,并用 print(my_dict) 查看结果。

—— 小象教研组

配套资料 · 直接下载

课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。

  • 第3章代码包:字典(含1 个 Notebook)
    ZIP · 2KB
    下载