Python实现嵌套同键字典合并:聚合列表内零散字典项
相邻同顶级键合并实现
核心逻辑:
- 仅合并连续出现的相同顶级键对应的内层字典
- 非连续的同顶级键独立作为合并项输出
# 修正语法笔误后的原始测试数据 raw_data = [ {'SNAPSHOT': {'SnapshotVersion': '304'}}, {'SNAPSHOT': {'SnapshotCreationDate': '2015-06-21 17:33:41'}}, {'CafeData': {'CafeVersion': '2807'}}, {'CafeData': {'IsSoftwareOnly': '1'}}, {'CafeData': {'IsPassportTCPIP': '1'}}, {'SNAPSHOT': {'SnapshotVersion': '777'}}, {'SNAPSHOT': {'SnapshotCreationDate': '2017-07-27 17:37:47'}}, ] def merge_adjacent_same_key(raw_list): if not raw_list: return [] result = [] # 初始化当前合并项 current_top_key, current_inner = next(iter(raw_list[0].items())) current_merged = {current_top_key: current_inner} for item in raw_list[1:]: top_key, inner_dict = next(iter(item.items())) # 顶级键相同,合并内层字段 if top_key == current_top_key: current_merged[top_key].update(inner_dict) # 顶级键不同,存入已合并项,切换合并目标 else: result.append(current_merged) current_top_key = top_key current_merged = {top_key: inner_dict} # 存入最后一个合并项 result.append(current_merged) return result
调用merge_adjacent_same_key(raw_data)即可得到第一类相邻合并的预期输出。
全局同顶级键聚合实现
核心逻辑:
- 忽略顶级键的出现位置,全局同顶级键统一聚合内层字段
- 同一内层字段仅出现1次则保留原始值类型,出现多次则自动合并为值列表
def merge_global_same_key(raw_list): # 临时存储聚合结果,Python 3.7+字典默认保持插入顺序 temp_agg = {} for item in raw_list: top_key, inner_dict = next(iter(item.items())) # 初始化当前顶级键的内层存储 if top_key not in temp_agg: temp_agg[top_key] = {} # 遍历内层字段做聚合 for inner_key, inner_value in inner_dict.items(): # 字段已存在,做值合并 if inner_key in temp_agg[top_key]: existing_val = temp_agg[top_key][inner_key] # 已有值不是列表,转列表追加新值 if not isinstance(existing_val, list): temp_agg[top_key][inner_key] = [existing_val, inner_value] # 已是列表,直接追加 else: existing_val.append(inner_value) # 字段首次出现,直接赋值 else: temp_agg[top_key][inner_key] = inner_value # 转换为要求的列表结构 return [{k: v} for k, v in temp_agg.items()]
调用merge_global_same_key(raw_data)即可得到第二类全局聚合的预期输出。
内容的提问来源于stack exchange,提问作者William
相关产品推荐
相关产品推荐

