Python两个列表生成对应键值字典,双层循环推导式输出错误如何解决
问题原因
你写的字典推导式用了两层嵌套循环,本质是对a、b两个列表做笛卡尔积遍历:
- 先遍历a取第一个键
k=1,接着遍历整个b列表依次赋值v=1、v=2、v=3,字典的键唯一,重复赋值会覆盖旧值,所以k=1最终对应的值是b的最后一个元素3 - 同理遍历
k=2、k=3时,都会重复遍历整个b列表,最终都被赋值为3,就得到了你看到的输出结果。
正确实现方案
因为你需要的是两个列表相同位置的元素配对成键值对,直接用zip()函数按位置拼接两个列表即可,有两种常用写法:
- 直接用dict构造函数转换:
a = [1, 2, 3] b = [1, 2, 3] print(dict(zip(a, b)))
- 用推导式写法(适合需要对键值做额外处理的场景):
print({k: v for k, v in zip(a, b)})
两种写法的输出均为{1: 1, 2: 2, 3: 3},符合需求。
内容的提问来源于stack exchange,提问作者mathieuD
相关产品推荐
相关产品推荐

