如何从现有字典生成嵌套复杂字典?修复代码逻辑问题
修复字典转换的循环逻辑问题
原始输入字典
inp = {'tagA': {'2023-03-09 00:00:00': 'X', '2023-03-09 01:00:00': 'X', '2023-03-09 02:00:00': 'Y', '2023-03-09 03:00:00': 'Z', '2023-03-09 04:00:00': 'X'}, 'tagB': {'2023-03-09 00:00:00': 'Y', '2023-03-09 01:00:00': 'X', '2023-03-09 02:00:00': 'X', '2023-03-09 03:00:00': 'Y', '2023-03-09 04:00:00': 'Z'}}
期望输出结构
output = { 'tags':[ { 'name': 'tagA', 'values':[ {'timestamp':'2023-03-09 00:00:00', 'value':'X'}, {'timestamp':'2023-03-09 01:00:00', 'value':'X'}, {'timestamp':'2023-03-09 02:00:00', 'value':'Y'}, {'timestamp':'2023-03-09 03:00:00', 'value':'Z'}, {'timestamp':'2023-03-09 04:00:00', 'value':'X'} ] }, { 'name': 'tagB', 'values':[ {'timestamp':'2023-03-09 00:00:00', 'value':'Y'}, {'timestamp':'2023-03-09 01:00:00', 'value':'X'}, {'timestamp':'2023-03-09 02:00:00', 'value':'X'}, {'timestamp':'2023-03-09 03:00:00', 'value':'Y'}, {'timestamp':'2023-03-09 04:00:00', 'value':'Z'} ] } ]}
错误代码问题分析
你提供的代码存在两个核心问题:
inner_list全局复用:在循环外初始化的inner_list会被所有tag共享,每次处理新tag时都会往同一个列表里追加数据,导致所有tag的values最终包含全部时间戳记录。- 内层循环重复添加tag:在内层时间戳循环里,每次迭代都往
outer_list添加tag字典,导致outer_list会出现大量重复的tag条目,而非每个tag只存一次完整数据。
inner_list = [] outer_dict = {} outer_list = [] for k, v in inp.items(): print(k) for timestamp, value in v.items(): inner_list.append({'timestamp':timestamp, 'value':value}) outer_list.append({'name': k, 'values':inner_list}) outer_dict.update({'tags': outer_list})
修复后的代码
基础循环版本
outer_dict = {'tags': []} # 遍历每个tag for tag_name, time_values in inp.items(): # 为当前tag单独创建values列表,避免全局复用 tag_values = [] # 遍历当前tag的所有时间戳和值 for timestamp, value in time_values.items(): tag_values.append({'timestamp': timestamp, 'value': value}) # 将当前tag的完整信息加入tags列表 outer_dict['tags'].append({'name': tag_name, 'values': tag_values})
简洁列表推导式版本
如果追求代码简洁,也可以用嵌套列表推导式实现:
output = { 'tags': [ { 'name': tag_name, 'values': [{'timestamp': ts, 'value': val} for ts, val in time_values.items()] } for tag_name, time_values in inp.items() ] }
内容的提问来源于stack exchange,提问作者Nili
相关产品推荐
相关产品推荐

