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])汇总记录
你的练习清单
- 说清外层集合和内部字段分别是什么。
- 每一层使用一对方括号。
- 遍历记录,而不是硬编码索引。
- 键可能缺失时,使用 get 或成员判断。
常见问题
怎样访问字典列表里的值?
先选中列表元素,再选中字典键:orders[0]["price"]。也可以遍历列表,从每条记录读取键。
键不存在怎么办?
直接访问会抛出 KeyError。需要默认值时用 order.get("discount", 0),或者先判断键是否存在。
嵌套数据应该拍平吗?
只有拍平后下一步操作明显更简单时才这样做。保留记录结构通常更容易理解。
练习嵌套数据
12 道题,覆盖字典列表、嵌套键、更新和求和。
继续阅读: