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] }
解决方案
核心思路
- 把每个键拆成两个编号,不用固定截取字符(避免编号长度变了出错)
- 遍历两个字典的所有键值对,找到编号匹配的组合
- 生成新键和拼接后的列表,存入新字典
可运行代码
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.
相关产品推荐
相关产品推荐

