如何在字典列表中设置不同的值?

时间:2017-05-30 20:12:11

标签: python dictionary

尝试向此词典列表添加不同的值。

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}]

我知道我如何分配值存在一些问题。

我做错了什么?我如何实现我想要的输出?

2 个答案:

答案 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)]