关于Python嵌套for循环中字典变量更新逻辑的疑问
嵌套循环中字典更新的疑问
以下是相关Python代码:
d1 = {} d1["One"] = "Uno" d1["Two"] = "Dos" d2 = {} d2["One"] = 1 d2["Two"] = 2 d2["Three"] = 3 for x in d1.keys(): for y in d2.keys(): if x != y: d1[x] = d2[x] + d2[x] print(d1)
我尝试理解这段嵌套for循环的执行结果,但困惑的是:第一次迭代中当x="One"且y="Three"时,d1["One"]为何没有被更新为6?
问题解析
你之所以有这个困惑,核心是误解了d2的值不会被d1的更新影响。我们一步步拆解x="One"时的内层循环执行过程:
- 内层第一次循环:
y="One",此时x==y,跳过更新操作,d1["One"]还是初始的"Uno"。 - 内层第二次循环:
y="Two",x!=y,执行d1["One"] = d2["One"] + d2["One"],也就是1+1=2,此时d1["One"]被改成2。 - 内层第三次循环:
y="Three",x!=y,再次执行d1["One"] = d2["One"] + d2["One"]——注意这里取的是d2["One"]的值,它自始至终都是1,所以计算结果还是1+1=2,而不是用已经更新的d1["One"]去叠加。
整个过程中d2从未被修改,所以每次计算都是基于d2里的原始值,自然不会得到6。如果要让d1["One"]在第三次循环时变成6,你需要修改代码让它基于自身当前值更新,比如把赋值语句改成d1[x] = d1[x] + d2[x](但要注意第一次赋值时d1[x]是字符串,会报错,需要先转类型)。
内容的提问来源于stack exchange,提问作者Auhunwardsen
相关产品推荐
相关产品推荐

