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

嵌套字典值修改问题:为何无法更新字典p及解决方法问询

解决嵌套字典值更新的问题

我来帮你分析下代码里的问题,然后给出可行的解决办法~

问题根源

你在循环里执行n = {key:value/3.0 for key, value in n.items()}时,其实是创建了一个全新的字典对象,并把这个新对象赋值给了变量n。但原来字典p中的'e'和'f'对应的仍然是最初的j和k字典,所以p的内容自然不会有变化。

解决方案1:直接修改原字典的内容

既然n是对p中嵌套字典的引用,我们可以直接修改n内部的键值对,这样就能同步更新p里的内容:

j = {'a':1.0}
k = {'c':3.0}
p = {'e':j,'f':k}

for n in p.itervalues():
    print("修改前的嵌套字典:", n)
    # 直接遍历嵌套字典的键,修改对应的值
    for key in n:
        n[key] = n[key] / 3.0
    print("修改后的嵌套字典:", n)

print("最终的p内容:", p)

运行这段代码后,p的内容会变成{'e': {'a': 0.3333333333333333}, 'f': {'c': 1.0}},符合预期。

解决方案2:重新赋值p中的键

如果你更倾向于用字典推导式创建新字典,可以直接遍历p的键,把新生成的字典赋值给对应的键:

j = {'a':1.0}
k = {'c':3.0}
p = {'e':j,'f':k}

# 遍历p的每个键,替换为新的字典
for key in p:
    p[key] = {k: v/3.0 for k, v in p[key].items()}

print("最终的p内容:", p)

这种方式也能达到更新p的目的,而且代码更简洁。

内容的提问来源于stack exchange,提问作者carmo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:12:59