我在python中有一个字典列表。 我想为所有具有唯一值的dicts更新一个键:值对,但所有这些值都获得相同的值。
这是我的代码:
num_cntxts=4
pkt_eop =[{'type' : 'eop', 'number':1}]
pkt_eop_pattern = pkt_eop*num_cntxts
#I want to add a 'cntxt' key to each of the 4 dicts
#which should have the value as the list position
for i,pkt_eop_inst in enumerate(pkt_eop_pattern):
print i,pkt_eop_inst
pkt_eop_inst['cntxt']=i
>0 {'cntxt': 0, 'type': 'eop', 'number': 1}
1 {'cntxt': 2, 'type': 'eop', 'number': 1}
2 {'cntxt': 4, 'type': 'eop', 'number': 1}
3 {'cntxt': 6, 'type': 'eop', 'number': 1}
The print statement shows the individual dict elements but the result is:
>pkt_eop_pattern
'[{'cntxt': 6, 'type': 'eop', 'number': 1}, {'cntxt': 6, 'type': 'eop', 'number': 1}, {'cntxt': 6, 'type': 'eop', 'number': 1}, {'cntxt': 6, 'type': 'eop', 'number': 1}]
我想要的是匹配打印输出的pkt_eop_pattern:
>pkt_eop_pattern
'[{'cntxt': 0, 'type': 'eop', 'number': 1}, {'cntxt': 2, 'type': 'eop', 'number': 1}, {'cntxt': 4, 'type': 'eop', 'number': 1}, {'cntxt': 6, 'type': 'eop', 'number': 1}]
当我遍历列表时,我希望得到一个指向每个字典的指针。 但是,情况并非如此,因为所有元素都采用了最后一次迭代的值。
答案 0 :(得分:1)
当你做
时会发生什么pkt_eop_pattern = pkt_eop*num_cntxts
是您获得一个包含num_cntxts
相同字典引用的列表。
您需要copy
字典。幸运的是,因为你在迭代它(并且列表扩展在python中相对轻量级):
num_cntxts=4
pkt_eop =[{'type' : 'eop', 'number':1}]
#I want to add a 'cntxt' key to each of the 4 dicts
#which should have the value as the list position
for i in xrange(num_cntxts):
my_copy = pkt_eop.copy()
pkt_eop_pattern.append(my_copy)
my_copy['cntxt'] = i