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

关于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"时的内层循环执行过程:

  1. 内层第一次循环:y="One",此时x==y,跳过更新操作,d1["One"]还是初始的"Uno"。
  2. 内层第二次循环:y="Two",x!=y,执行d1["One"] = d2["One"] + d2["One"],也就是1+1=2,此时d1["One"]被改成2。
  3. 内层第三次循环: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 06:28:38