Ordered Dictionary の値を変更する必要があります。ループを使用しました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
これはおそらく基本的なプログラミングの原則なので、「なぜ」に興味があるので、このような間違いをこれ以上犯さないようにしています。ありがとう!