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

aza*_*aks 1 python dictionary

尝试将不同的值添加到此词典列表中.

empty_dict={'time':0, 'value':None}

dict=[empty_dict for i3 in range(5)]

print dict
Run Code Online (Sandbox Code Playgroud)

O/P:

[{'value': None, 'time': 0}, {'value': None, 'time': 0}, {'value': None, 'time': 0}, {'value': None, 'time': 0}, {'value': None, 'time': 0}]
Run Code Online (Sandbox Code Playgroud)

当我设置它

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}]
Run Code Online (Sandbox Code Playgroud)

^这会发生,其中所有值都采用它设置的最后一个值.

我想要输出

[{'value': 0, 'time': 0}, {'value': 1, 'time': 0}, {'value': 2, 'time': 0}, {'value': 3, 'time': 0}, {'value': 4, 'time': 0}]
Run Code Online (Sandbox Code Playgroud)

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

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

Nat*_*aul 5

问题是这些词典中的每一个都指向同一个对象.

您需要创建empty_dict的副本.您可以使用字典构造函数来完成此操作.它需要另一个dict(在这种情况下,你的empty_dict)作为参数并返回一个新的字典.

empty_dict = {'time':0, 'value':None}
my_dicts = [dict(empty_dict) for i3 in range(5)]
Run Code Online (Sandbox Code Playgroud)

此外,如果你命名你的dict dict,那么它将影响内置.