Python如何比对两个字典的值 生成对应键映射的结果字典
字典值匹配映射实现方案
实现逻辑
你要做的是两个字典基于value的跨字典键映射,最高效的实现方式分两步:
- 先对dict2做键值反转,生成
value -> 原key的查询映射,避免每次匹配都全量遍历dict2,把时间复杂度控制在线性级别 - 遍历dict1的所有键值对,直接用dict1的value去反向映射里取dict2对应的key,组装成最终结果
注:你给出的示例中dict2的value全为唯一值,不存在反转映射的键冲突问题,可直接使用该方案
可直接运行的代码
# 输入字典 dict1 = { "a": "121", "b": "132", "c": "312", "d": "434", "e": "564", "f": "663", } dict2 = { "a": "312", "b": "121", "c": "564", "d": "663", "e": "434", "f": "132", } # 构建dict2的value到key的反向查询表 value_to_key_dict2 = {v: k for k, v in dict2.items()} # 生成最终匹配结果 Results = {k1: value_to_key_dict2[v1] for k1, v1 in dict1.items()}
输出验证
执行print(Results)即可得到你期望的结果:
{ "a": "b", "b": "f", "c": "a", "d": "e", "e": "c", "f": "d", }
异常场景适配
- 如果dict2存在重复value:反转映射时后出现的key会覆盖先出现的key,若需保留所有匹配key,可将反向映射的value存储为列表结构
- 如果dict1存在dict2中没有的value:直接取值会抛出
KeyError,可将结果生成逻辑改为{k1: value_to_key_dict2.get(v1, None) for k1, v1 in dict1.items()},自定义缺省填充值即可
内容的提问来源于stack exchange,提问作者user17080143
相关产品推荐
相关产品推荐

