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

基于多公共键合并字典列表并按指定标题整合

多公共键字典列表合并实现

问题说明

现有两个字典列表:

dictlist1 = [
    {"air": "xenon", "severity": "high", "ball": "cricket"},
    {"air": "nitrogen", "severity": "low", "ball": "tennis"},
]

dictlist2 = [
    {"air": "xenon", "severity": "high", "country": "india"},
    {"air": "nitrogen", "severity": "low", "country": "australia"},
]

需要基于air和severity两个公共键将它们合并,生成如下格式的结果:

[
    {
        "air": "xenon",
        "severity": "high",
        "dict_name1": {"ball": "cricket"},
        "dict_name2": {"country": "india"},
    },
    {
        "air": "nitrogen",
        "severity": "low",
        "dict_name1": {"ball": "tennis"},
        "dict_name2": {"country": "australia"},
    },
]

目前已有支持单公共键合并的Python代码,需要修改为支持多公共键的版本。

修改后的实现代码

def find_by_keys(lst, keys, target_dict):
    """根据多个键的组合在列表中查找匹配字典的索引"""
    target_key_values = tuple(target_dict[key] for key in keys)
    for i, dic in enumerate(lst):
        current_key_values = tuple(dic[key] for key in keys)
        if current_key_values == target_key_values:
            return i
    return -1


def merge_dicts(*dict_lists, common_keys):
    result = []

    for dict_name, dict_list in dict_lists:
        for d in dict_list:
            # 查找当前字典在结果列表中的位置
            i = find_by_keys(result, common_keys, d)
            if i > -1:
                # 复制当前字典,移除公共键后存入结果
                filtered_dict = {k: v for k, v in d.items() if k not in common_keys}
                result[i][dict_name] = filtered_dict
            else:
                # 新建结果项,先保存公共键
                temp = {key: d[key] for key in common_keys}
                # 复制当前字典,移除公共键后存入对应名称的字段
                filtered_dict = {k: v for k, v in d.items() if k not in common_keys}
                temp[dict_name] = filtered_dict
                result.append(temp)

    return result

代码调用示例

# 调用合并函数
merged_result = merge_dicts(
    ("dict_name1", dictlist1),
    ("dict_name2", dictlist2),
    common_keys=["air", "severity"]
)

# 格式化打印结果
import json
print(json.dumps(merged_result, indent=4))

运行后会输出符合需求的合并结果。

关键修改点说明

  1. 多键查找适配:将原单键查找函数改为find_by_keys,通过生成多个公共键的键值对元组判断字典是否匹配,确保多键组合一致才视为同一记录。
  2. 参数扩展:将原函数的common_key参数改为common_keys,支持传入列表或元组形式的多个公共键。
  3. 过滤逻辑优化:用字典推导式直接移除公共键,替代原代码中先复制再pop的方式,逻辑更简洁高效。
  4. 合并逻辑简化:去掉原代码中多余的重复查找步骤,直接基于当前处理的字典生成过滤后的子字典,避免索引错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 09:35:02