模块 1 - Python 基础 · 第 05 课
字典与集合(Dict & Set)
用字典表达带名称的数据,用集合去重并进行成员关系判断。
学习目标
- 使用字典存储键值对并安全读取;
- 使用集合去重和检查成员关系;
- 选择列表、字典或集合来表达 AI 配置与标签数据。
字典:用键查找值
config = {"learning_rate": 1e-3, "batch_size": 64, "epochs": 10}
print(config["batch_size"])
config["epochs"] = 12
config["device"] = "cpu"
键必须是可哈希对象,常见的是字符串或数字。访问不存在的键会抛出 KeyError;不确定键是否存在时使用 get():
seed = config.get("seed", 0)
get() 的第二个参数是缺省值,不会把缺省键写入字典。
遍历和嵌套数据
下面的 for 是 Preview:这里关注字典键值结构;循环语法会在 Module 2 正式讲解。
metrics = {"train_loss": 0.42, "valid_loss": 0.51}
for name, value in metrics.items():
print(f"{name}={value:.2f}")
AI 项目中常见的批次记录可以是字典嵌套列表:
batch = {"images": ["a.png", "b.png"], "labels": [0, 1]}
print(len(batch["images"]))
先明确每个键的含义,再决定是否需要更严格的 dataclass 或数组类型。
集合:去重与成员关系
labels = ["cat", "dog", "cat", "bird"]
unique_labels = set(labels)
print(len(unique_labels))
print("dog" in unique_labels)
集合没有稳定的索引顺序。需要展示时可以 sorted(unique_labels),但不要把集合当作列表使用。
常见错误与选择
config["missing"]会抛出KeyError,不确定时用get()。set([1, 2, [3]])会失败,因为列表不可哈希;可改用元组(3,)。- 需要保留顺序时用列表,需要按名称查找时用字典,需要去重时用集合。
快速检查
给定 scores = {"a": 0.8, "b": 0.9},如何读取 b 并在没有 c 时返回 None?创建一个含重复类别的列表,输出排序后的唯一类别。
查看答案
使用 scores["b"] 和 scores.get("c");使用 sorted(set(labels)) 得到排序后的唯一值。
练习
★ 基础
创建一个 config 字典,包含学习率、批大小和设备。
★★ 应用
当设备键缺失时默认使用 "cpu",并打印一行配置摘要。
★★★ 综合
统计一组批次字典中的唯一标签,并保留每个标签第一次出现的顺序。
综合练习参考答案
```python batches = [{"labels": ["cat", "dog"]}, {"labels": ["dog", "bird"]}] seen = set() ordered = [] for batch in batches: for label in batch["labels"]: if label not in seen: seen.add(label) ordered.append(label) assert ordered == ["cat", "dog", "bird"] print(ordered) ``` 这里的 `for` 仍是前置预览;正式学习循环后,应能逐行解释两个嵌套循环。D2L 衔接
D2L 示例常用字典保存超参数、指标和批次信息,集合则适合检查标签集合或去重索引。下一课会把这些容器的索引、切片和成员操作放在一起比较。
第 05 课 学习进度仅保存在当前浏览器。