嵌套字典值修改问题:为何无法更新字典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
相关产品推荐
相关产品推荐

