Skip to main content
 首页 » 编程设计

Python有序字典: Why is [] notation required to change dictionary values using a for loop

2025年05月04日31落叶

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

尝试过:

idx = 0 
for name,val in settings.items(): 
    idx += 1 
    val = idx 
    print name,val 

结果: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 

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

请您参考如下方法:

Python 中的变量名是“指向”值的引用。下面是您尝试 val = idx 之前的样子:

这是它之后的样子:

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