Skip to main content
 首页 » 编程设计

Python将嵌套的字典列表合并到单个字典列表

2025年05月04日23lyj

我想将嵌套的字典列表合并到 python 2.6 中的单个字典列表, 示例数据 - 这里仅给出了数千次迭代中的两次迭代。

INPUTJSON=[ 
 {'EXCEPTIONS':  
            [ 
              {'LASTOCCURED': '2018-03-12 12:11:23', 'COUNT': 25, 'NAME': 'CLFRW0134W'},  
              {'LASTOCCURED': '2018-03-12 12:11:42', 'COUNT': 10, 'NAME': 'SRV0145GH'} 
            ],  
  'JVM_NAME': 'TestiingAWS01', 'GCCOUNT': 10}, 
 
 {'EXCEPTIONS':  
           [ 
              {'LASTOCCURED': '2018-03-13 12:14:23', 'COUNT': 25, 'NAME': 'CLFRW0134W'},  
              {'LASTOCCURED': '2018-03-18 12:55:23', 'COUNT': 10, 'NAME': 'SRV0145GH'} 
           ],  
  'JVM_NAME': 'QAAWS02', 'GCCOUNT': 10} 
] 

预期结果:

[ 
 {'JVM_NAME':'TestiingAWS01','GCCOUNT':10, 'LASTOCCURED': '2018-03-12 12:11:23', 'COUNT': 25, 'NAME': 'CLFRW0134W'}, {'LASTOCCURED': '2018-03-12 12:11:42', 'COUNT': 10, 'NAME': 'SRV0145GH', 'JVM_NAME':'TestiingAWS01','GCCOUNT':10}, 
 {'JVM_NAME': 'QAAWS02', 'GCCOUNT': 10, 'LASTOCCURED': '2018-03-13 12:14:23', 'COUNT': 25, 'NAME': 'CLFRW0134W'}, {'LASTOCCURED': '2018-03-18 12:55:23', 'COUNT': 10, 'NAME': 'SRV0145GH', 'JVM_NAME': 'QAAWS02', 'GCCOUNT': 10} 
] 

请高手帮我实现这个,这样我就可以轻松地将最终数据处理成sqlite。

更新:感谢所有提供快速解决方案的专家,从这里的所有答案中整合我通过避免硬编码“键”(因为每个键上有 40 个键)为我的数据提供了一个工作代码迭代)在 python 2.6 上。

def merge_two_dicts(x, y): 
    """Given two dicts, merge them into a new dict as a shallow copy.""" 
    z = x.copy() 
    z.update(y) 
    return z 
 
resultlist =[] 
for i,v in enumerate(INPUTJSON): 
    EXCEPTIONS = v["EXCEPTIONS"] 
    del v["EXCEPTIONS"] 
    for j,val in enumerate(EXCEPTIONS): 
        resultlist.append(merge_two_dicts(EXCEPTIONS[j],INPUTJSON[i])) 
 
print resultlist 

Can it be compiled in comprehension list using lambda?

请您参考如下方法:

这是一种方法。

lst = [{**{'JVM_NAME': i['JVM_NAME'], 'GCCOUNT': i['GCCOUNT'], **w}} \ 
       for i in INPUTJSON for w in i['EXCEPTIONS']] 

对于 ** 语法,参见 How to merge two dictionaries in a single expression?

结果

[{'COUNT': 25, 
  'GCCOUNT': 10, 
  'JVM_NAME': 'TestiingAWS01', 
  'LASTOCCURED': '2018-03-12 12:11:23', 
  'NAME': 'CLFRW0134W'}, 
 {'COUNT': 10, 
  'GCCOUNT': 10, 
  'JVM_NAME': 'TestiingAWS01', 
  'LASTOCCURED': '2018-03-12 12:11:42', 
  'NAME': 'SRV0145GH'}, 
 {'COUNT': 25, 
  'GCCOUNT': 10, 
  'JVM_NAME': 'QAAWS02', 
  'LASTOCCURED': '2018-03-13 12:14:23', 
  'NAME': 'CLFRW0134W'}, 
 {'COUNT': 10, 
  'GCCOUNT': 10, 
  'JVM_NAME': 'QAAWS02', 
  'LASTOCCURED': '2018-03-18 12:55:23', 
  'NAME': 'SRV0145GH'}]