9.5 字典类型
(dict)是 Python 中最重要的数据结构之一,用于存储“键—值”(key–value)对应关系。它是一种可变的映射类型,键必须唯一且可哈希;从 Python 3.7 起(语言规范保证),字典保留插入顺序,这使得许多操作更加可预测。字典可高效实现查找、计数、配置管理等任务。
与列表不同,字典通过键(key)而不是索引来访问数据。
9.5.1 字典的创建
字典可通过花括号 {} 、构造函数 、以及等多种方法创建。
empty = {}• 键(key)必须是可哈希(hashable)的对象,通常是不可变类型(如字符串、数值、元组等)。注意:元组只有当其所有元素也都是可哈希时才可作为键。frozenset 也是可哈希的集合类型,可作为键。
• 值(value)可以是任意类型,甚至包含列表、字典或函数等可变对象。
9.5.2 字典的常用操作与方法
字典可实现键值访问、更新、删除、遍历与合并等多种,还提供丰富的用于高效管理数据。
(1)访问与修改
使用键名访问对应的值,若键不存在,.get() 可避免抛出 KeyError。
print(student) # {'name': '小艾', 'score': 98, 'class': 'A1'}(2)删除操作
Python 提供多种方式删除字典元素(需注意这些方法的返回值与副作用)。
print(data) # {}说明:.pop() 可指定默认值避免 KeyError,如 data.pop("x", None)。
(3)成员判断与长度
print(len(person)) # 字典包含的键值对数量(4)遍历
通过 .keys()、.values()、.items() 可分别遍历键、值或键值对。
print(f"{k} -> {v}")说明:.items() 返回的元素是 (键, 值) 形式的元组,可在循环中直接拆包。
(5)合并与更新
使用 .update() 原地合并两个字典。从 Python 3.9 起,也可用 | 运算符返回新字典。若键冲突,后者会覆盖前者的值。
print(merged) # {'lr': 0.001, 'batch': 64, 'epochs': 10, 'device': 'cuda'}(6)安全插入:setdefault()
当键不存在时 .setdefault() 方法自动添加默认值,并返回该键对应的值(存在则直接返回现有值)。适合在分组统计中使用。
print(scores) # {'小艾': [95, 88], '小包': [90]}说明:相比手动判断是否存在键,.setdefault() 更简洁高效。但当默认值是可变对象时要注意共享引用问题。
(7)拷贝
字典的赋值只是复制引用,若要复制内容,可使用浅拷贝或深拷贝。
print("原字典未变:", a) # {'x': 1, 'y': [2, 3, 4]}说明:浅拷贝只复制外层对象,深拷贝会递归复制所有内部元素。
当字典中包含可变对象(如列表或嵌套字典)时,应使用 deepcopy() 以避免相互影响。
(8)排序与解包
字典本身不可直接“按序”重排,但可通过 等函数获取排序后的视图。
print(extended) # {'a': 1, 'b': 2}说明:sorted() 对字典的默认行为是对键排序;若按值排序可用 sorted(d.items(), key=lambda x: x[1])。
解包 {**a, **b} 常用于合并配置或参数表,后者会覆盖前者同名键。
(9)统计与计数
结合 .get() 方法可以手动高效统计频次。
# {'AI': 3, 'Python': 1, 'Code': 1}说明:在生产环境中也可考虑使用 .Counter。
9.5.3 字典综合示例与应用
例 9.5.1:通讯录管理器
字典非常适合存储“键值一一对应”的信息,如姓名与电话号码的映射。
print("更新后的通讯录:", contacts)说明:字典在查找操作上具有极高效率,非常适合构建通讯录、配置表、索引映射等结构。
例 9.5.2:商品库存统计系统
通过字典可轻松管理商品与库存数量的映射关系,并支持动态更新与汇总。
print(f"{item}:{count} 个")说明:该示例展示了字典在动态数据管理中的典型应用,如库存管理、销售记录或资源计数。在实际开发中,这类字典常与文件或数据库交互,用于实时同步业务数据。
9.6 组合数据的嵌套与综合应用
嵌套与组合是数据结构的高阶应用。通过合理使用列表、元组、集合与字典,可以构建复杂的数据模型,并结合函数或类实现更高层次的抽象能力。
例 9.6.1:学生成绩管理系统
一个学生可以有多门课程成绩,可用字典与列表嵌套表示。
print(f"{name} 的平均成绩:{average(scores):.1f}")输出:
鞠子舟 的平均成绩:92.7此示例结合了字典(键值映射)、列表(序列存储)与函数调用(结构化计算),展示了嵌套数据在实际数据管理中的常见用法。
例 9.6.2:AI 模型参数配置表
在人工智能开发中,模型配置文件通常以嵌套字典形式存储,便于统一管理不同模块参数。
print("训练轮次:", config["training"]["epochs"]) 输出:
训练轮次: 10嵌套字典是一种常见的数据描述结构,可轻松转换为 文件,用于深度学习模型配置、超参数管理或日志记录。
例 9.6.3:模型训练日志分析器
在机器学习实验中,我们常使用字典与列表来记录训练过程中的多组指标(如损失 loss、准确率 accuracy)。
通过组合数据结构,可以轻松统计与可视化模型性能趋势。
analyze_logs(logs)输出:
最高准确率:86.00%说明:此示例结合了列表(顺序存储多轮训练记录) 与 字典(保存每轮的指标),展示了如何组织结构化数据以便分析。
在实际 AI 项目中,可扩展为读取 JSON 训练日志、绘制学习曲线或自动记录实验结果。
小结
本次课系统学习了 Python 的字典(dict)类型,掌握了字典的创建方法、访问与修改技巧、常用方法,并通过综合示例了解了字典在通讯录管理、库存系统、模型配置与日志分析等应用场景中的强大作用。
在下一课中,我们将学习文件操作(File I/O),了解如何将这些内存中的数据包括列表、字典等保存到外部文件(如 .txt、.csv、.json),从而实现数据的持久化存储与跨程序共享。
![]()
“点赞有美意,赞赏是鼓励”
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.