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
相关产品推荐
相关产品推荐

