为什么用「点名册」来讲字典初学 Python 的学生对列表很熟悉因为列表有下标names[0]、names[1]按顺序数就行。但一遇到字典问题就来了——很多孩子会写成d[0]然后报KeyError因为他们下意识觉得取数据总要有个编号。字典的核心是用有意义的名字去取数据而不是用位置。这一点用「点名册」类比最自然老师手里那本册子查一个人的信息靠的是姓名学号不是第几行。一句话对照表先给学生点名册Python 字典姓名键 key这个人的成绩、电话值 value整本册子字典本身完整代码下面这段可以直接运行建议让学生先跑一遍看输出再回来读讲解。# 点名册姓名 - 分数score_book{小明:92,小红:88,小刚:76,}# 1. 按姓名取分数print(score_book[小明])# 92# 2. 新增一条记录score_book[小丽]95print(score_book)# 3. 修改已有记录score_book[小刚]80print(score_book[小刚])# 80# 4. 安全查询不确定名字在不在册子里print(score_book.get(小强))# Noneprint(score_book.get(小强,0))# 0给一个默认值# 5. 遍历整本册子forname,scoreinscore_book.items():print(f{name}的分数是{score})# 6. 只遍历姓名 / 只遍历分数print(list(score_book.keys()))print(list(score_book.values()))# 7. 判断某个名字是否在册if小明inscore_book:print(小明在册)# 8. 删除一条记录delscore_book[小红]print(score_book)代码要点拆解1. 大括号 冒号。字典用{}包起来每一项写成键: 值项与项之间用逗号隔开。要提醒学生冒号是键和值的分界线写错成等号或不写都会直接语法报错。2. 取值用方括号里面放键。score_book[小明]返回的是92不是小明。这里学生最容易搞反以为方括号里放的是位置。3.get()和[]的区别。这是本课最重要的一个点。score_book[小强]会直接让程序崩溃KeyError而score_book.get(小强)返回None不报错。可以这样跟学生说[]是你确定这个人一定在册直接翻到那一页get()是你不确定先问一句有没有这个人没有就返回空。get()的第二个参数是默认值get(小强, 0)表示没这个人就当作 0 分。做统计题时非常常用。4.items()返回键值对。for name, score in score_book.items()一次拿到名字和分数两个变量这是遍历字典最常用的写法。如果只写for x in score_book拿到的其实是键姓名不是值这一点也要讲清楚。5. 键必须是不可变类型。字符串、数字、元组可以当键列表不行。原因很简单键要能稳定地定位列表可以随时改内容不适合当门牌号。讲到这里可以顺带复习一下列表和元组的区别。学生常见错误错误一用下标取字典。score_book{小明:92}print(score_book[0])# KeyError错因是把列表的习惯带过来了。纠正方式强调字典没有第几个的概念键是什么就写什么。错误二键名拼错或大小写不一致。score_book{XiaoMing:92}print(score_book[xiaoming])# KeyErrorPython 是区分大小写的。这类错误不报语法错只在运行时报KeyError学生往往找不到原因。建议在课堂上演示一次让他们记住报错信息长什么样。错误三get()忘了接收返回值。score_book.get(小强,0)print(score_book[小强])# 仍然 KeyErrorget()只是返回默认值它不会把这条记录写进字典。如果真想加进去得显式赋值score_book[小强]score_book.get(小强,0)10错误四遍历时拿到的是键却当成值用。forxinscore_book:print(x1)# 报错x 是字符串键 改成 forxinscore_book.values(): 才是遍历值。## 可以留的练习1.建一个字典存5位同学的姓名和年龄打印出年龄最大的那位同学的名字。2.2.统计一段字符串中每个字符出现的次数例如 hello 得到 {h:1,e:1,l:2,o:1}。提示先判断字符在不在字典里不在就设为0再累加。3.3.把两个列表 names[小明,小红] 和 scores[92,88] 合并成一个字典。提示用 zip() 或循环配合下标。4.4.给定一本分数册删除所有低于60分的记录。提示遍历的时候不要直接删先把要删的键存到列表里再统一删——这是很多学生会踩的坑可以让他们先踩一次再讲。## 小结字典的设计目的就是用名字找东西。判断一个学生是否真的理解了看他会不会在不确定键是否存在时主动用 get()而不是盲目用 []。写代码时把这个人一定在册吗这个问题问出来字典就算入门了。