如何基于输入字典d1与列表l1生成目标字典d2?
实现字典反向映射的解决方案
要完成从d1到d2的转换,核心是建立值到键的反向映射,再根据l1的顺序生成目标字典。以下是两种简洁的实现方式:
方法一:基础字典操作
无需导入额外模块,用普通字典完成映射构建:
d1 = {'A1':['b1','b2','b3'], 'A2':['b2', 'b3'], 'A3':['b1', 'b5']} l1 = ['b2', 'b5', 'b1', 'b3'] # 构建值到键的临时映射 temp_map = {} for a_key, b_values in d1.items(): for b_val in b_values: # 若当前b值未在映射中,初始化空列表 if b_val not in temp_map: temp_map[b_val] = [] temp_map[b_val].append(a_key) # 根据l1生成目标字典d2 d2 = {b: temp_map[b] for b in l1} # 输出结果:{'b2': ['A1', 'A2'], 'b5': ['A3'], 'b1': ['A1', 'A3'], 'b3': ['A1', 'A2']} print(d2)
方法二:用collections.defaultdict简化代码
借助defaultdict可以省去判断键是否存在的步骤,让代码更简洁:
from collections import defaultdict d1 = {'A1':['b1','b2','b3'], 'A2':['b2', 'b3'], 'A3':['b1', 'b5']} l1 = ['b2', 'b5', 'b1', 'b3'] # 自动为不存在的键创建空列表 temp_map = defaultdict(list) for a_key, b_values in d1.items(): for b_val in b_values: temp_map[b_val].append(a_key) # 生成d2,若l1含d1中没有的元素,可改用get方法设默认值:temp_map.get(b, []) d2 = {b: temp_map[b] for b in l1}
注意事项
如果l1中包含d1值列表里没有的元素,直接取temp_map[b]会触发KeyError。此时可以用temp_map.get(b, [])来返回空列表作为默认值,避免报错。
内容的提问来源于stack exchange,提问作者Noorulain Islam
相关产品推荐
相关产品推荐

