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

Python字典键部分匹配合并:生成关联键值新字典的实现问题

合并匹配的字典键与值

问题说明

我有两个字典:

dict1 = {
    '001-002': [100, 1.5, 150.0, 50.0, -75.0, 60.0, -55.0],
    '001-003': [100, 1.5, 150.0, 50.0, -75.0, 60.0, -55.0],
    '001-005': [100, 1.5, 150.0, 50.0, -75.0, 60.0, -55.0]
}

dict2 = {
    '002-004': [200, 2.5, 250.0, 20.0, -95.0, 80.0, -95.0],
    '003-004': [100, 1.5, 150.0, 50.0, -75.0, 60.0, -55.0],
    '005-004': [100, 1.5, 150.0, 50.0, -75.0, 60.0, -55.0]
}

需要生成第三个字典,规则是:当第一个字典键的第二个编号(比如'001-002'里的'002')和第二个字典键的第一个编号(比如'002-004'里的'002')匹配时,把两者的键合并成新键(比如'001-002-004'),值列表也拼接在一起。

我试了两段代码都没成功:

# 尝试1
for key in destinations.keys():
    if key[0:3] in origins.keys():
        print("yes")

# 尝试2
for key, values in destinations.items():
    if key[0:3] in origins.keys():
        destinations[key] = [destinations[key], origins[keys]]

期望的输出是这样的:

{
    '001-002-004': [100, 1.5, 150.0, 50.0, -75.0, 60.0, -55.0, 200, 2.5, 250.0, 20.0, -95.0, 80.0, -95.0],
    '001-003-004': [100, 1.5, 150.0, 50.0, -75.0, 60.0, -55.0, 100, 1.5, 150.0, 50.0, -75.0, 60.0, -55.0],
    '001-005-004': [100, 1.5, 150.0, 50.0, -75.0, 60.0, -55.0, 100, 1.5, 150.0, 50.0, -75.0, 60.0, -55.0]
}

解决方案

核心思路

  1. 把每个键拆成两个编号,不用固定截取字符(避免编号长度变了出错)
  2. 遍历两个字典的所有键值对,找到编号匹配的组合
  3. 生成新键和拼接后的列表,存入新字典

可运行代码

dict1 = {
    '001-002': [100, 1.5, 150.0, 50.0, -75.0, 60.0, -55.0],
    '001-003': [100, 1.5, 150.0, 50.0, -75.0, 60.0, -55.0],
    '001-005': [100, 1.5, 150.0, 50.0, -75.0, 60.0, -55.0]
}

dict2 = {
    '002-004': [200, 2.5, 250.0, 20.0, -95.0, 80.0, -95.0],
    '003-004': [100, 1.5, 150.0, 50.0, -75.0, 60.0, -55.0],
    '005-004': [100, 1.5, 150.0, 50.0, -75.0, 60.0, -55.0]
}

merged_dict = {}

# 遍历第一个字典的每个键值对
for key1, val1 in dict1.items():
    # 拆分key1,取第二个编号
    _, end_key1 = key1.split('-')
    # 遍历第二个字典的每个键值对
    for key2, val2 in dict2.items():
        # 拆分key2,取第一个编号
        start_key2, _ = key2.split('-')
        # 编号匹配就合并
        if end_key1 == start_key2:
            # 生成新键:key1 + key2的后半部分
            new_key = f"{key1}-{key2.split('-')[1]}"
            # 拼接两个值列表
            merged_dict[new_key] = val1 + val2

# 打印结果
print(merged_dict)

代码解释

  • split('-')会把键拆成两个部分,比如'001-002'拆成['001', '002'],这样不管编号是几位都能正确获取
  • 双循环遍历所有可能的组合,确保所有匹配的键都能被找到
  • 新键直接用f-string拼接,格式清晰;值列表用+直接拼接,简单高效

内容的提问来源于stack exchange,提问作者Frank R.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 21:17:14