尝试向此词典列表添加不同的值。
empty_dict={'time':0, 'value':None}
dict=[empty_dict for i3 in range(5)]
print dict
O / P:
[{'value': None, 'time': 0}, {'value': None, 'time': 0}, {'value': None, 'time': 0}, {'value': None, 'time': 0}, {'value': None, 'time': 0}]
当我设置它时
for i,i_val in enumerate(dict):
dict[i]['value']=i
print dict
O/P: [{'value': 4, 'time': 0}, {'value': 4, 'time': 0}, {'value': 4, 'time': 0}, {'value': 4, 'time': 0}, {'value': 4, 'time': 0}]
^发生这种情况,其中所有值都采用它设置的最后一个值。
我希望输出为
[{'value': 0, 'time': 0}, {'value': 1, 'time': 0}, {'value': 2, 'time': 0}, {'value': 3, 'time': 0}, {'value': 4, 'time': 0}]
我知道我如何分配值存在一些问题。
我做错了什么?我如何实现我想要的输出?
答案 0 :(得分:5)
问题是每个词典都引用同一个对象。
您需要创建empty_dict的副本。您可以使用字典构造函数来完成此操作。它需要另一个dict(在本例中,你的empty_dict)作为参数并返回一个新的字典。
empty_dict = {'time':0, 'value':None}
my_dicts = [dict(empty_dict) for i3 in range(5)]
另外,如果你命名你的dict dict
,那么它会遮挡内置的。
答案 1 :(得分:4)
基本上,你需要这样做:
[{'value': i, 'time': 0} for i in range(5)]