我的字典如下
{
'34.8': [[0, 0, 0, 0], [0, 0, 0, 0]],
'34.6': [[0, 0, 0, 0], [0, 0, 0, 0]],
'35.0': [[0, 0, 0, 0], [0, 0, 0, 0]],
'34.4': [[0, 0, 0, 0], [0, 0, 0, 0]],
'34.2': [[0, 0, 0, 0], [0, 0, 0, 0]],
'34.0': [[0, 0, 0, 0], [0, 0, 0, 0]]
}
我运行代码。
print '34.6', testDic['34.6']
print '34.8', testDic['34.8']
testDic['34.6'][0][0] = 1234
print testDic
但结果是
{
'34.8': [[1234, 0, 0, 0], [0, 0, 0, 0]],
'34.6': [[1234, 0, 0, 0], [0, 0, 0, 0]],
'35.0': [[1234, 0, 0, 0], [0, 0, 0, 0]],
'34.4': [[1234, 0, 0, 0], [0, 0, 0, 0]],
'34.2': [[1234, 0, 0, 0], [0, 0, 0, 0]],
'34.0': [[1234, 0, 0, 0], [0, 0, 0, 0]]}
为什么改变所有的dic值?以及如何仅更改1(例如'34 .6')?
正如评论中所建议的那样,你正在转换dict的所有值,因为它们引用了同一个对象,在你的情况下是一个列表列表。看看这个例子:
d = dict(zip(keys, [[[0]*4]*2]*len(keys)))
d['34.6'][0][0] = 1234
print d
{'34.0': [[1234, 0, 0, 0], [1234, 0, 0, 0]],
'34.2': [[1234, 0, 0, 0], [1234, 0, 0, 0]],
'34.4': [[1234, 0, 0, 0], [1234, 0, 0, 0]],
'34.6': [[1234, 0, 0, 0], [1234, 0, 0, 0]],
'34.8': [[1234, 0, 0, 0], [1234, 0, 0, 0]],
'35.0': [[1234, 0, 0, 0], [1234, 0, 0, 0]]}
在这种情况下,甚至链接单个列表并转换它们的第一个值。否则,如果您“强制”为每个键创建一个新的列表列表,则可以避免此问题,因为词典的每个项目都是独立的。
d = {}
for key in keys:
d[key] = [[0]*4] + [[0]*4]
d['34.6'][0][0] = 1234
print d
{'34.0': [[0, 0, 0, 0], [0, 0, 0, 0]],
'34.2': [[0, 0, 0, 0], [0, 0, 0, 0]],
'34.4': [[0, 0, 0, 0], [0, 0, 0, 0]],
'34.6': [[1234, 0, 0, 0], [0, 0, 0, 0]],
'34.8': [[0, 0, 0, 0], [0, 0, 0, 0]],
'35.0': [[0, 0, 0, 0], [0, 0, 0, 0]]}