Python字典推导式输出不符合预期的原因及修改方案
现象原因
你编写的是嵌套循环结构的字典推导式,执行逻辑如下:
- 先遍历第一个列表拿到第一个k值
0,接下来会完整遍历第二个v列表,先后给0赋值5、8、7,最终k=0对应的v是最后一次赋值的7 - 同理处理k=
1、k=2时,都会被最后一次遍历到的v值7覆盖,所以最终所有键的值都是7
修正方法
要实现两个列表同位置元素一一对应为键值对,不需要嵌套循环,使用zip()函数将两个列表按位置配对后做单层循环即可:
{k:v for k, v in zip([0,1,2], [5,8,7])}
如果需要适配两个列表长度不一致的场景,可以搭配itertools.zip_longest自定义缺省值补全逻辑。
内容的提问来源于stack exchange,提问作者APM500
相关产品推荐
相关产品推荐

