更改字典中的值

时间:2018-01-05 13:46:14

标签: python dictionary

我想更改存储在字典词典中的值。

这是我试图实现的代码。问题是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

3 个答案:

答案 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和原始词典(jk),您可以执行以下操作:

由于词典是可变的,你可以将它的内容替换为另一个词典,如下所示:

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}}}