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

Python如何合并两个字典properties列表中相同id的字典项

实现方案

核心逻辑是用临时字典存储id与属性条目的映射关系,同id的条目做字段合并,最后将临时字典的值转为列表即可。

基础实现(适配2个字典)

# 假设你现有的两个字典为d1、d2
# 初始化结果字典,顶层字段(如name)可按需调整合并规则,本例两个字典name一致直接复用
result = {
    "name": d1["name"],
    "properties": []
}

id_prop_map = {}
# 先遍历第一个字典的属性列表
for item in d1["properties"]:
    item_id = item["id"]
    id_prop_map[item_id] = item.copy()

# 遍历第二个字典的属性列表,合并同id条目
for item in d2["properties"]:
    item_id = item["id"]
    if item_id in id_prop_map:
        # 同id字段合并,后出现的同名字段会覆盖先出现的,符合示例需求
        id_prop_map[item_id].update(item)
    else:
        id_prop_map[item_id] = item.copy()

# 组装最终结果
result["properties"] = list(id_prop_map.values())

运行后输出的result完全匹配你给出的预期结果:

{
    "name": "harry",
    "properties": [
        {
            "id": "N3",
            "status": "OPEN",
            "type": "energetic",
            "language": "english"
        },
        {
            "id": "N5",
            "status": "OPEN",
            "type": "hot"
        },
        {
            "id": "N6",
            "status": "OPEN",
            "type": "cool"
        }
    ]
}

扩展实现(适配任意数量字典)

如果后续需要合并更多同结构的字典,可以封装为通用函数:

def merge_multi_dicts(dict_list):
    if not dict_list:
        return {}
    # 顶层字段默认取第一个字典的,有其他合并规则可自行修改
    res = {k: v for k, v in dict_list[0].items() if k != "properties"}
    id_prop_map = {}
    for d in dict_list:
        for prop in d.get("properties", []):
            pid = prop["id"]
            if pid in id_prop_map:
                id_prop_map[pid].update(prop)
            else:
                id_prop_map[pid] = prop.copy()
    res["properties"] = list(id_prop_map.values())
    return res

# 调用示例
merged_dict = merge_multi_dicts([d1, d2])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:45:01