Administrator
Administrator
发布于 2026-10-31 / 0 阅读
0
0

Python 从入门到初级(06):字典与嵌套数据:描述商品和服务器档案

本篇是《Python 从入门到初级》第 6 / 20 篇。示例使用 Python 3.12 兼容语法,完整目录结构与数据见配套源码包。

字典适合保存带名字的字段。商品不只是一个价格,还包括名称、库存和分类;服务器也不只是一个 IP,还包含名称与指标。本篇用字典把这些信息放在一起。

字段名与值组成记录,嵌套记录描述更复杂对象

1. 列表按位置取,字典按键取

product = {"name": "键盘", "price_cents": 19900}
print(product["name"])

name 是键,键盘 是值。键对应的含义比“列表第几个位置”清晰,特别适合来自 CSV、JSON 或接口的业务记录。

同一个键只能对应当前一个值,再赋值会更新。值可以是文字、数字、列表甚至另一个字典。字典的插入顺序可保留,但它不是自动按键排序的容器。

2. 完整示例:商品和服务器档案

保存为 lesson06.py:

product = {"name": "机械键盘", "price_cents": 19900, "stock": 8}
product["stock"] -= 1
product["category"] = "办公"

server = {
    "name": "web01",
    "address": "192.0.2.10",
    "metrics": {"cpu_percent": 72, "memory_percent": 64},
}

print("商品名:", product["name"])
print("剩余库存:", product["stock"])
print("不存在的备注:", product.get("remark", "暂无"))
print("CPU:", server["metrics"]["cpu_percent"])
print("包含 stock 键:", "stock" in product)
print("商品字段:", list(product))

预期商品库存从 8 变为 7,新增办公分类;不存在的备注返回“暂无”;服务器 CPU 显示为 72。

这里只保存教学值,没有连接任何真实服务器。程序处理的是数据结构,读取服务器实时指标还需要对应的数据来源。

3. 方括号和 get 怎么选择

product["name"] 表达“这个字段必须存在”。缺失时会抛出 KeyError,适合尽早暴露不符合约定的数据。

product.get("remark", "暂无") 表达“字段可以缺失,缺失时使用默认值”。它适合可选信息,但不要用默认值掩盖必需字段丢失。

如果某个键存在且其值为 None,get() 会返回 None,不会因为它看起来“没有内容”就替换成默认值。需要区分“键缺失”和“值为空”。

常用字典操作见 映射类型文档。

4. 嵌套字段要逐层访问

server["metrics"]["cpu_percent"] 的含义是先拿到 metrics 这份字典,再取里面的 CPU 字段。可以先拆成两行观察:

metrics = server["metrics"]
cpu = metrics["cpu_percent"]

这一小段需要接在完整示例里运行,因为它依赖前面定义的 server。学习时要区分“完整文件”和“依赖上下文的片段”。

嵌套太深时,先画出结构或逐层打印类型,通常比把长表达式继续堆在一起更容易定位错误。

5. 一组记录为什么通常是列表套字典

servers = [
    {"name": "web01", "cpu_percent": 72},
    {"name": "db01", "cpu_percent": 91},
]
print(servers[1]["name"])

外层列表表示“有多台设备”,内部字典表示“一台设备有哪些字段”。预期输出 db01。后面读 CSV 和 JSON 时,经常会遇到这样的结构。

"stock" in product 检查的是键是否存在,不是值是否存在。.keys()、.values()、.items() 分别用于观察键、值和键值对,下一篇会结合循环使用。

6. 练习:补一份资产记录

创建一个字典,包含 name、address、labels,其中 labels 再保存 environment 和 owner。通过嵌套访问输出负责人,然后用 get 读取不存在的可选备注。

再尝试读取不存在的必需字段,观察 KeyError。把这个报错理解为“记录不符合字段约定”,而不是只想着让错误消失,后面的数据处理会更可靠。


上一篇:列表、元组和集合:管理清单与去重 · 系列目录 · 下一篇:循环与推导式:筛选订单并统计金额


评论