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

Python中如何合并值相近的字典?按name字段合并point列表示例

实现方案

利用Python3.6版本字典默认保留插入顺序的特性,直接用内置字典做分组存储即可实现需求,无需引入第三方依赖,具体实现如下:

from uuid import uuid1

# 模拟输入数据
Input = [
    {'id': uuid1(), 'name': 'mem', 'point': [{'second': 0, 'severity': 'infor'}], 'date': '2021-09-15', 'PO': 5},
    {'id': uuid1(), 'name': 'cpu', 'point': [{'second': 10, 'severity': 'warning'}], 'date': '2021-09-13', 'PO': 3},
    {'id': uuid1(), 'name': 'cpu', 'point': [{'second': 20, 'severity': 'critical'}], 'date': '2021-09-14', 'PO': 3},
    {'id': uuid1(), 'name': 'cpu', 'point': [{'second': 30, 'severity': 'infor'}], 'date': '2021-09-15', 'PO': 3}
]

def merge_data(input_list):
    group = {}
    for item in input_list:
        name = item['name']
        if name not in group:
            # 首次出现时初始化分组
            group[name] = item.copy()
            group[name]['point'] = group[name]['point'].copy()
        else:
            # 拼接point列表
            group[name]['point'].extend(item['point'])
            # 覆盖非point字段,自动保留最后一次的取值
            for k, v in item.items():
                if k != 'point':
                    group[name][k] = v
    return list(group.values())

Output = merge_data(Input)
# 可直接打印验证输出结果
print(Output)

补充说明

  • 代码完全匹配要求的合并规则:同name分组下的point列表会按遍历顺序拼接,其余字段自动取分组最后一条记录的取值
  • 已做基础的引用隔离,修改合并后的数据不会影响原始输入。如果需要完全深度隔离,可引入copy模块,把上述copy()操作替换为copy.deepcopy()即可。

内容的提问来源于stack exchange,提问作者Tai Do

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:09:03