Python中如何实现键值项数量不等的字典间的键值映射?
问题场景
现有两个映射字典:
- 第一个字典存储a值到b值的映射
dict_a_to_b - 第二个字典存储a值到c值的映射
dict_a_to_c,该字典键值对数量多于第一个字典
初始字典代码如下:
dict_a_to_b = {2:4, 6:9, 9:3} dict_a_to_c = {2: 0.1, 6:0.2, 9: 0.8, 10:0.6, 50: 0.77, 12:0.56}
需要生成c值到b值的映射字典dict_c_to_b,仅保留两个原字典共有的a键对应的映射关系,预期输出为:
dict_c_to_b = {0.1:4, 0.2:9, 0.8:3}
实现方案
核心思路是取两个字典键的交集(即同时存在于两个字典中的a值),以共有的a值为中间桥接,拼接c值和b值的对应关系。
推荐写法(字典推导式)
用Python原生支持的字典键集合交集操作,代码简洁执行效率高:
dict_c_to_b = {dict_a_to_c[k]: dict_a_to_b[k] for k in dict_a_to_b.keys() & dict_a_to_c.keys()}
代码说明:
dict_a_to_b.keys() & dict_a_to_c.keys()会直接返回两个字典共有的键,自动跳过dict_a_to_c里独有的10、50、12这类不需要处理的键- 遍历共有键时,直接取对应c值作为新字典的键,对应b值作为新字典的值即可
运行后得到的结果和预期完全一致。
兼容写法(新手易读版)
如果对字典视图的集合操作不熟悉,也可以用基础循环+键存在判断的写法,逻辑完全等价:
dict_c_to_b = {} # 遍历a到b的所有映射,只处理在a到c字典里也存在的a键 for a_key, b_val in dict_a_to_b.items(): if a_key in dict_a_to_c: c_val = dict_a_to_c[a_key] dict_c_to_b[c_val] = b_val
内容的提问来源于stack exchange,提问作者yogesh
相关产品推荐
相关产品推荐

