我想更改存储在字典词典中的值。
这是我试图实现的代码。问题是p保持不变,我不知道如何更新p。
j = {'a':1.0}
k = {'c':3.0}
p = {'e':j,'f':k}
for n in p.itervalues():
print n
n = {key:value/3.0 for key, value in n.items()}
print n
print p
答案 0 :(得分:6)
您需要将更新后的值分配回原始字典。
j = {'a':1.0}
k = {'c':3.0}
p = {'e':j,'f':k}
for k,v in p.items():
p[k] = {key:value/3.0 for key, value in v.items()}
print p
答案 1 :(得分:1)
执行n = {...}
时,您要为n。
如果您想同时更改p
和原始词典(j
和k
),您可以执行以下操作:
由于词典是可变的,你可以将它的内容替换为另一个词典,如下所示:
def replace_dict(original, new):
original.clear()
original.update(new)
然后执行replace_dict(n, {key:value/3.0 for key, value in v.items()})
。
由于你所做的只是对每个值应用一个函数(“除以3”),你也可以这样做:
for key, value in n.iteritems():
n[key] = value / 3.0
答案 2 :(得分:0)
我认为值得一提的是你使用的是python2。
#!/usr/bin/env python2
j = {'a': 1.0}
k = {'c': 3.0}
p = {'e': j, 'f': k}
for v in p.itervalues():
print "v before inplace updates:", v
for k, v_inside in v.items():
print "v[k] before inplace change", v[k]
v[k] = {key: value / 3.0 for key, value in v.items()}
print "v[k] after inplace change", v[k]
print "p after inplace edits:\n", p
生成此输出:
v before inplace updates: {'a': 1.0}
v[k] before inplace change 1.0
v[k] after inplace change {'a': 0.3333333333333333}
v before inplace updates: {'c': 3.0}
v[k] before inplace change 3.0
v[k] after inplace change {'c': 1.0}
p after inplace edits:
{'e': {'a': {'a': 0.3333333333333333}}, 'f': {'c': {'c': 1.0}}}