Python 2.6中如何将嵌套字典列表合并为单个字典列表
在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'} # 更多异常条目... ], # 其他外层字段... } ]
解决方案代码
针对Python 2.6的兼容性,我们可以这样写:
result = [] for entry in INPUTJSON: # 提取外层除EXCEPTIONS外的所有公共字段 outer_fields = dict((key, value) for key, value in entry.iteritems() if key != 'EXCEPTIONS') # 遍历每个异常条目,合并字段 for exception in entry['EXCEPTIONS']: # 复制异常字典,避免修改原数据,再合并外层字段 merged_dict = exception.copy() merged_dict.update(outer_fields) result.append(merged_dict)
代码解释
- 先初始化空列表
result来存储最终的扁平化结果。 - 遍历输入列表中的每个顶层条目
entry:- 用生成器表达式构建
outer_fields,筛选出顶层条目中除EXCEPTIONS外的所有键值对(比如JVM_NAME、GCCOUNT这些公共信息)。 - 接着遍历当前条目的
EXCEPTIONS列表里的每个异常字典:- 先复制异常字典(防止修改原始输入数据),再通过
update()方法把外层公共字段合并进去,这样每个异常条目就带上了对应的JVM等信息。 - 将合并后的字典添加到结果列表中。
- 先复制异常字典(防止修改原始输入数据),再通过
- 用生成器表达式构建
输出示例
处理后的结果会是这样的扁平化列表:
[ {'LASTOCCURED': '2018-03-12 12:11:23', 'COUNT': 25, 'NAME': 'CLFRW0134W', 'JVM_NAME': 'TestiingAWS01', 'GCCOUNT': 10}, {'LASTOCCURED': '2018-03-12 12:11:42', 'COUNT': 10, 'NAME': 'SRV0145GH', 'JVM_NAME': 'TestiingAWS01', 'GCCOUNT': 10}, {'LASTOCCURED': '2018-03-13 12:14:23', 'COUNT': 25, 'NAME': 'CLFRW0134W', 'JVM_NAME': 'xxx', 'GCCOUNT': yyy} # 更多合并后的条目... ]
注意事项
- 如果外层字段和
EXCEPTIONS里的字段重名,update()会用外层字段的值覆盖异常字典里的同名键。如果需要保留异常字典里的键值,可以调换合并顺序:先复制外层字段,再更新异常字段。 - 代码里用了
iteritems(),这是Python 2.x中遍历字典键值对的高效方法,Python 2.6完全支持。
内容的提问来源于stack exchange,提问作者Rahul Trivedi
相关产品推荐
相关产品推荐

