如何在循环中更新JSON对象并保留所有迭代数据?
解决循环生成全组合JSON的问题
核心问题是你用字典的update()方法会直接覆盖已有键值对,循环结束后自然只剩最后一组数据。要保存所有state、city、vote的组合,得把每个组合作为元素存入列表,再嵌套到主字典里。
修正后的代码
import json # 初始化主结构,用列表存所有组合 info = { "name": "master", "entries": [] } states = ["MN", "AZ", "IL"] cities = ["One", "Two", "Three"] votes = ["No", "Yes", "Maybe"] for state in states: for city in cities: for vote in votes: # 生成单组数据的字典 single_entry = { "state": state, "cities": { "name": city, "votes": {"decision": vote} } } # 把单组数据追加到列表里 info["entries"].append(single_entry) print(json.dumps(info, indent=4))
正确输出示例(截取部分)
{ "name": "master", "entries": [ { "state": "MN", "cities": { "name": "One", "votes": { "decision": "No" } } }, { "state": "MN", "cities": { "name": "One", "votes": { "decision": "Yes" } } }, // 省略其余25组组合... { "state": "IL", "cities": { "name": "Three", "votes": { "decision": "Maybe" } } } ] }
重要说明
- 必须用列表存储多组数据:字典的
update()是替换同键的值,而列表的append()是新增元素,不会覆盖之前的内容。 - 修正了原期望输出的语法错误:JSON要求严格的键值对结构,不能在
name: "master"后直接放对象列表,必须给这个列表加一个键(比如entries),否则生成的JSON不符合规范,API无法解析。
内容的提问来源于stack exchange,提问作者H14
相关产品推荐
相关产品推荐

