Python有序字典:为什么需要使用for循环更改字典值的符号?

jjz*_*jjz 1 python ordereddictionary

我需要更改有序字典的值.我使用了for循环,但值没有变化.我发现这是因为我在循环中分配变量名而不是直接使用括号[]表示法.为什么我不能通过循环变量名来引用循环中的值?

尝试:

idx = 0
for name,val in settings.items():
    idx += 1
    val = idx
    print name,val
Run Code Online (Sandbox Code Playgroud)

结果: OrderedDict([('Accel X Bias', None), ('Mag X Bias', None)])

预期: OrderedDict([('Accel X Bias', 1), ('Mag X Bias', 2)])

完整代码:

import collections
settings = collections.OrderedDict([('Accel X Bias', None), ('Mag X Bias', None)])
idx = 0

print "\nIn loop, values are changed:"
for name,val in settings.items():
    idx += 1
    val = idx
    print name,val

print "\nAfter Loop, values didn't change:\n",settings

for name,val in settings.items():
    idx += 1
    val = idx
    settings[name] = idx
print "\nAfter Loop, bracket notation used, values changed successfully:\n",settings
Run Code Online (Sandbox Code Playgroud)

这可能是一些基本的编程原则,所以我对'为什么'感兴趣,所以我不会犯这样的错误.谢谢!

Mar*_*ius 6

Python中的变量名是指向"指向"值的引用.以下是您尝试之前的样子val = idx:

在此输入图像描述

以下是它的样子:

在此输入图像描述

如果你做了settings['Accel X Bias'] = idx,你会得到:

在此输入图像描述


Ign*_*ams 5

在循环中,nameval结合到每个在反过来的映射对象.简单地重新绑定名称不会修改原始的可迭代.