Python字典推导式输出存疑:为何值v为2而非预期的1?
字典推导式输出结果解惑
你的代码:
dict={k:v for k in range(1,4) for v in range(1,3) } print(dict)
实际输出:
{1: 2, 2: 2, 3: 2}
你预期输出是{1: 1, 2: 1, 3: 1},疑惑为什么v的取值是2?
原因拆解
这是因为你的字典推导式里的两个for是嵌套执行的,外层遍历k,内层遍历v,每个k会被内层的所有v依次赋值,最后只保留最后一次的赋值结果。
具体执行过程:
- 当
k=1时,先给k=1赋值v=1,字典变成{1:1};接着再赋值v=2,字典更新为{1:2} - 当
k=2时,先赋值v=1,字典变为{1:2, 2:1};再赋值v=2,更新为{1:2, 2:2} - 当
k=3时,先赋值v=1,字典变为{1:2, 2:2, 3:1};再赋值v=2,最终变成{1:2, 2:2, 3:2}
所以每个k最后对应的都是内层循环的最后一个v值——2。
得到预期输出的写法
如果想要每个k对应v=1,直接去掉内层的for循环,固定v的值即可:
dict={k:1 for k in range(1,4)} print(dict)
内容的提问来源于stack exchange,提问作者Vegeta_sama
相关产品推荐
相关产品推荐

