打开课程目录
Module 5预计 90 分钟

字典、元组与数据结构选择

用有意义的键保存记录,用固定顺序保存不应修改的数据

学习目标

能够创建和访问 dictionary 并调试 KeyError;理解 tuple 的基本用途,能读取简单 tuple,并说明 tuple 与 list 在可修改性上的基础区别。

开始之前

列表适合一组有顺序、含义相近的元素。但一条样本记录可能同时包含编号、温度和状态;只看 index 0、1、2 很难知道每个位置代表什么。字典用有意义的 key 标记不同信息。

本课先学习 dictionary 的 key-value 组织方式,再认识内容固定的 tuple。最后根据“是否需要标签”和“是否允许修改”选择结构,而不是把所有数据都放进同一种容器。

概念 01

Dictionary 用 key-value pair 保存有标签的记录

样本编号、温度和状态含义不同,用名称标记后,代码不必靠记忆位置来理解记录。

Dictionary 的英文全称是 Dictionary,中文叫字典,Python 写法使用花括号 {}。例如 sample_record = {"sample_id": "A17", "temperature": 22.5} 会创建一个 dictionary,再把它保存在变量中。它适合保存一条由不同字段组成的记录。

Key 的英文全称是 Key,中文叫键,是冒号左边用于标记信息的名称,例如 "sample_id"。Value 的英文全称是 Value,中文叫值,是冒号右边真正保存的数据,例如 "A17"。实际读取时,key 帮助 Python 找到对应 value。

Key-value pair 的英文全称是 Key-value pair,中文叫键值对,Python 写成 "sample_id": "A17"。一个 pair 把 key 与 value 连接起来,dictionary 中不同 pair 用逗号分隔。实际用途是让每项信息既有内容,也有清楚标签。

  • Dictionary 使用 {}
  • Key 是信息标签
  • Value 是标签对应的数据
  • Key-value pair 写成 key: value
  • 逗号分隔多个键值对

创建一条有标签的样本记录

sample_record 是 dictionary;sample_id 与 temperature 是 key,A17 与 22.5 是各自的 value。

Python
代码编辑器将在滚动到这里时加载
点击运行时准备 Python
TERMINAL程序输出

点击“运行”后,程序输出会显示在这里。

预期结果:{'sample_id': 'A17', 'temperature': 22.5}

概念 02

用 key 访问、修改和增加 dictionary 数据

程序可以用有意义的名称直接找到字段,而不需要记住它在第几个位置。

Dictionary access 的英文全称是 Dictionary access,中文叫字典访问,Python 写成 record["key"]。例如 sample_record["temperature"] 会产生 22.5。列表用数字 index 访问位置;字典用 key 访问有标签的 value,这是两种结构最直观的区别。

Dictionary 也能修改:sample_record["temperature"] = 23.0 会替换现有 value。使用一个尚不存在的新 key,例如 sample_record["status"] = "ready",会增加新的 key-value pair。实际用途是更正记录或补充字段。

读取、修改和增加都使用方括号,但方括号里的内容是 key,不是列表的数字位置。写代码前先看变量保存的是 list 还是 dictionary,再决定方括号里应放 index 还是 key。

  • record[key] 读取 value
  • 列表使用 index,字典使用 key
  • 已有 key 赋值会修改 value
  • 新 key 赋值会增加 pair
  • key 必须与字典中的写法一致

读取温度、修改数值并增加状态

第一次访问产生旧温度;随后同一个 key 被修改,并通过新 key 增加 status。

Python
代码编辑器将在滚动到这里时加载
点击运行时准备 Python
TERMINAL程序输出

点击“运行”后,程序输出会显示在这里。

预期结果:22.5 / {'sample_id': 'A17', 'temperature': 23.0, 'status': 'ready'}

概念 03

遍历 key,并从 KeyError 中检查拼写和大小写

逐个处理记录字段时可以直接遍历 key;访问不存在的 key 时,错误信息会指出需要核对的名称。

for key in sample_record: 会让 loop variable key 依次得到 dictionary 中的每个 key。循环内再写 sample_record[key] 就能取得当轮对应的 value。这个基础写法足以逐项显示记录,也能复用 M4 已学的 for loop。

KeyError 的英文全称是 Key Error,Python 错误类型写成 KeyError,中文叫键不存在错误。record = {"temperature": 22.5} 后读取 record["Temperature"] 会显示 KeyError: 'Temperature',因为 dictionary 中没有完全相同的 key。它的实际用途是提醒你检查错误行、实际 key、拼写和大小写。

String 区分大小写,因此 "temperature" 与 "Temperature" 是不同 key。调试时先看错误最后一行和行号,再查看 dictionary 创建处有哪些 key;不要随意添加一个新 key 来掩盖读取错误。

  • for key in dictionary 逐个取得 key
  • dictionary[key] 取得当轮 value
  • KeyError 表示 key 不存在
  • key 的拼写和大小写必须一致
  • 对照创建处与错误行调试

逐项显示记录的 key 与 value

每轮 key 得到一个字段名,sample_record[key] 再读取这个字段对应的 value。

Python
代码编辑器将在滚动到这里时加载
点击运行时准备 Python
TERMINAL程序输出

点击“运行”后,程序输出会显示在这里。

预期结果:sample_id: A17 / temperature: 22.5

概念 04

Tuple 保存固定顺序,并根据任务选择数据结构

有些数据需要保持固定,有些需要更新;根据数据含义选择结构,会让程序更清楚也更不容易误改。

Tuple 的英文全称是 Tuple,中文叫元组,Python 写法使用圆括号 ()。例如 location = (-37.8, 144.9) 创建一个有顺序的 tuple;location[0] 和 location[1] 仍使用 index 访问。它适合保存顺序明确、创建后不应被修改的一小组值。

Immutable 的英文全称是 Immutable,中文叫不可变的。Tuple 是 immutable,所以 location[0] = -38.0 会产生 TypeError,表示这个 tuple 不支持修改元素。它的实际用途是表达“这组值应保持固定”;如果数据需要更正或追加,应选择 mutable list。

选择规则可以保持简单:一组有顺序且会修改或追加的同类值用 list;一条需要名称标记不同字段的记录用 dictionary;一组有固定顺序且不应修改的值用 tuple。选择依据是数据含义,不是哪个括号更短。

  • Tuple 使用 (),有顺序并支持 index
  • Immutable 表示创建后不能修改元素
  • 会更新的一组值选 list
  • 有标签的记录选 dictionary
  • 固定的一组值选 tuple

使用 tuple 保存固定坐标

location 是 tuple,两个 element 有固定顺序;可以按 index 读取,但不应修改其中的位置。

Python
代码编辑器将在滚动到这里时加载
点击运行时准备 Python
TERMINAL程序输出

点击“运行”后,程序输出会显示在这里。

预期结果:-37.8 / 144.9

常见错误

这些写法为什么不工作

错误不是失败,而是 Python 告诉你“这部分我无法理解”。先找到差异,再一次只改一个问题。

访问的 key 大小写与创建时不同

KeyError 给出的名称是程序尝试读取的 key。回到 dictionary 创建处逐字比较,特别检查 String 的大小写。

record = {"temperature": 22.5}
print(record["Temperature"])
改成
record = {"temperature": 22.5}
print(record["temperature"])

尝试修改 immutable tuple

Tuple 的 element 不能在创建后用 index 替换。需要更新的数据应放进 mutable list;固定数据才选择 tuple。

location = (-37.8, 144.9)
location[0] = -38.0
改成
location = [-37.8, 144.9]
location[0] = -38.0

引导修改

更新 dictionary,并读取固定 tuple 数据

这不是正式练习。跟着步骤修改已有代码,观察每次改变如何影响程序。

  1. 1把 sample_record 中 temperature 的 value 修改为 23.0。
  2. 2增加 key "status",value 使用 "ready"。
  3. 3分别用 key 输出 sample_id 和 status。
  4. 4location 是不修改的 tuple;使用 index 输出它的第二个 element。

完成后:记录中的温度为 23.0,并增加 ready 状态;输出 A17、ready 和 tuple 的第二个值 144.9。

修改这段代码

先运行,再按左侧步骤逐项修改。你的草稿会保存在这个浏览器中。

Python
代码编辑器将在滚动到这里时加载
点击运行时准备 Python
TERMINAL程序输出

点击“运行”后,程序输出会显示在这里。

正式练习

现在独立完成 2 道练习

先运行代码观察问题,再点击“检查答案”。检查只关心题目要求的结果,不要求你照抄参考写法。

正式练习

创建有标签的样本记录

练习 1/2

创建名为 sample_record 的字典,必须包含三个 key-value pair:sample_id 对应字符串 A17、temperature 对应数字 22.5、status 对应字符串 ready。必须使用 key 访问,把读取的 sample_id 和 status 分别保存到变量,再使用包含变量插值的 f-string 输出 Sample: A17 和 Status: ready;不要固定写死这两个结果。

10 分钟难度 2/3编写代码
代码编辑器将在滚动到这里时加载
TERMINAL程序输出

点击“运行”后,程序输出会显示在这里。

需要一点提示?

先自己尝试一次;卡住时再逐级打开提示。

本课总结

本课小结

  • 1Dictionary 使用 {} 保存 key-value pair,通过 key 读取、修改或增加 value。
  • 2for key in dictionary 可以直接遍历 key;KeyError 时检查错误行、实际 key、拼写和大小写。
  • 3Tuple 使用 () 保存有顺序但 immutable 的值;可以读取,不能修改元素。
  • 4List 适合会变化的有序数据,dictionary 适合有标签的记录,tuple 适合固定数据。