Python如何将字典内列表元素按另一字典映射替换并删除不匹配项
问题原因
- 赋值逻辑错误:每次匹配到映射值就直接给目标字典的对应键赋值单个值,会覆盖之前的匹配结果,因此最终仅保留了最后一次匹配到的
"Orange" - 未做结构兼容:匹配到多个结果时需要用列表存储,无匹配结果时要赋值为空字符串,原逻辑没有处理这两种场景
- 循环逻辑冗余:字典本身支持O(1)时间复杂度的键存在性判断,不需要遍历映射字典
d1的所有键,三层循环会大幅降低运行效率
修正后代码
# 初始化结果字典 d3 = {} for key, elem_list in d.items(): # 遍历当前列表的所有元素,筛选出存在d1映射的元素并替换为对应值 mapped_res = [d1[elem] for elem in elem_list if elem in d1] # 无匹配结果时赋值为空字符串,否则保留映射后的列表 d3[key] = mapped_res if mapped_res else "" # 打印验证结果 import pprint pprint.pprint(d3)
运行上述代码输出的d3完全符合你要求的结构,如果需要b列表的顺序和你示例中的["Banana", "Melon", "Orange"]一致,调整遍历顺序为匹配d1的键顺序即可:
d3 = {} for key, elem_list in d.items(): elem_set = set(elem_list) mapped_res = [d1[k] for k in d1 if k in elem_set] d3[key] = mapped_res if mapped_res else ""
内容的提问来源于stack exchange,提问作者user13998985
相关产品推荐
相关产品推荐

