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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 13:06:04