Python遍历嵌套字典生成指定结构列表时数据被覆盖如何解决
问题解决方法
核心问题原因
- 没有初始化空列表存储每次生成的指标数据,所有赋值都复用同一个
metrics字典,循环时会持续覆盖之前的内容,最终只能得到最后一次循环的结果 fields字段构造逻辑错误,没有按照预期取列表的第一个元素为key、第二个为value,而是直接传入了完整列表
修正后代码
d = {'a1': {'b': ['x', 1]}, 'a2': {'b1': ['x1', 2]}} # 初始化空列表存储所有结果 result = [] for k, v in d.items(): # 每次循环新建一个metrics字典,避免覆盖 metrics = {} metrics['measurements'] = "XXXXX" metrics['time'] = "timexxxxx" if isinstance(v, dict): for j, h in v.items(): metrics['tags'] = {'MPC': j, 'host': k} # 取列表第一个元素为key,第二个为value构造fields metrics['fields'] = {h[0]: h[1]} # 把当前构造完成的metrics加入结果列表 result.append(metrics)
输出结果
运行上述代码后得到的result符合预期结构:
[ { "measurements": "XXXXX", "tags": { "MPC": "b", "host": "a1" }, "time": "timexxxxx", "fields": { "x": 1 } }, { "measurements": "XXXXX", "tags": { "MPC": "b1", "host": "a2" }, "time": "timexxxxx", "fields": { "x1": 2 } } ]
注:你给出的预期输出示例中第二条记录的
MPC、fields值存在笔误,按照输入字典的结构,修正后的代码输出是符合实际数据对应关系的。
内容的提问来源于stack exchange,提问作者psagrera
相关产品推荐
相关产品推荐

