专项练习 · 8 分钟阅读

Python 嵌套数据练习:字典列表

嵌套数据看起来复杂,直到你给每一层命名。字典列表不过是一组记录,每个字典就是一条带字段的记录。

从一条记录开始

一个字典适合保存一条记录:每个键是字段名,每个值保存数据。先把单条记录打印出来,看清结构,再添加更多记录。

order = {"drink": "latte", "price": 4.5}
print(order["drink"])
print(order["price"])

一个字典,两个字段

一次读取一层

值还是字典时,再加一对方括号。data["shop"] 返回内层字典,再用 ["name"] 读取其中的字段。不要把整条路径硬塞进一次访问。

data = {"shop": {"name": "Corner", "open": True}}
print(data["shop"]["name"])

两层键

遍历记录

记录很多时,把字典放进列表。遍历列表,从每条记录里读取同一个键。只需要每条的某个字段时,列表推导式很方便。

orders = [{"drink": "latte"}, {"drink": "tea"}]
for order in orders:
    print(order["drink"])

记录集合

更新嵌套值

赋值可以沿着完整路径进行:选中记录,再选中键,然后赋新值。把更新写在能解释原因的位置附近。

orders = [{"price": 3.0}, {"price": 4.5}]
orders[0]["price"] = 3.5
print(orders[0]["price"])

更新一个字段

求和与筛选

生成器表达式从每条记录读取一个字段,sum 再把结果相加。只统计部分记录时,加上 if 子句。总和不对时,先打印中间列表。

orders = [{"price": 3.0}, {"price": 4.5}, {"price": 2.0}]
print(sum(order["price"] for order in orders))
print([order["price"] for order in orders if order["price"] > 3])

汇总记录

你的练习清单

常见问题

怎样访问字典列表里的值?

先选中列表元素,再选中字典键:orders[0]["price"]。也可以遍历列表,从每条记录读取键。

键不存在怎么办?

直接访问会抛出 KeyError。需要默认值时用 order.get("discount", 0),或者先判断键是否存在。

嵌套数据应该拍平吗?

只有拍平后下一步操作明显更简单时才这样做。保留记录结构通常更容易理解。

练习嵌套数据

12 道题,覆盖字典列表、嵌套键、更新和求和。

打开练习

继续阅读: