You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何对比两个等长列表差异并生成原值映射新值的变更字典

问题说明

给定两个长度相同的列表,需要输出同位置下发生变更的原值到新值的映射字典:key为原列表中发生变更的元素,value为目标列表对应位置的新值。
你之前写的集合差集取差异的代码存在固有缺陷:集合会自动去重、元素无序,且完全丢失位置信息,无法实现原值到新值的对应匹配——比如示例里第二个列表的重复值4会被集合去重,根本识别不到索引3位置从8变为4的变更。另外你给出的示例变量名虽然带set后缀,但实际是列表类型,不要和Python原生的集合类型混淆。

实现方法

直接逐位配对两个列表同索引的元素,筛选出值不相等的配对,组装成字典即可,完全匹配你给出的示例效果。

基础易读写法

first_list = [1, 4, 6, 8, 9]
sec_list = [1, 4, 5, 4, 9]

change_dict = {}
for old_val, new_val in zip(first_list, sec_list):
    if old_val != new_val:
        # 此处转str是为了匹配示例中key、value均为字符串的要求,不需要可去掉str()包裹
        change_dict[str(old_val)] = str(new_val)

运行后得到的change_dict输出为{'6':'5', '8':'4'},和预期结果完全一致。

简洁推导式写法

change_dict = {str(old): str(new) for old, new in zip(first_list, sec_list) if old != new}
注意事项
  • 上述实现基于题目给出的「两个列表长度相同」的前提,如果存在列表长度不一致的场景,zip会默认以更短的列表长度为准截断配对,可以在逻辑前增加长度校验做异常处理。
  • 如果原列表存在多个位置的同一个旧值对应不同新值的情况,字典会保留最后一次出现的配对,这是字典key唯一的固有特性。

内容的提问来源于stack exchange,提问作者Defqon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 20:45:35