You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从现有字典生成嵌套复杂字典?修复代码逻辑问题

修复字典转换的循环逻辑问题

原始输入字典

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'}
        ]
    }
]}

错误代码问题分析

你提供的代码存在两个核心问题:

  1. inner_list全局复用:在循环外初始化的inner_list会被所有tag共享,每次处理新tag时都会往同一个列表里追加数据,导致所有tag的values最终包含全部时间戳记录。
  2. 内层循环重复添加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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 19:34:59