如何从以下代码中获取字典列表?

时间:2019-05-07 12:12:33

标签: python python-3.x list dictionary

我需要获取字典列表。该词典是根据两个不同的列表创建的,其中一个是列表列表。我只得到最后的迭代结果作为输出。我可以知道我在以下代码中犯了什么错误吗?提前非常感谢您。

d = ['Good','Bad','Lazy']
main_list=[[0,1,2],[3,4,5],[6,7,8]]
dict2={"eventType": "custom Event Name", "attribute1": "value"}
list1=[]

for item in main_list:
    dict2.update(dict(zip(d,item)))
    list1.append(dict2)

print("LIST: ",list1)

预期输出:

 LIST:  [{'eventType': 'custom Event Name', 'attribute1': 'value', 'Good': 0, 'Bad': 1, 'Lazy': 2}, {'eventType': 'custom Event Name', 'attribute1': 'value', 'Good': 3, 'Bad': 4, 'Lazy': 5}, {'eventType': 'custom Event Name', 'attribute1': 'value', 'Good': 6, 'Bad': 7, 'Lazy': 8}]

我得到的输出:

LIST:  [{'eventType': 'custom Event Name', 'attribute1': 'value', 'Good': 6, 'Bad': 7, 'Lazy': 8}, {'eventType': 'custom Event Name', 'attribute1': 'value', 'Good': 6, 'Bad': 7, 'Lazy': 8}, {'eventType': 'custom Event Name', 'attribute1': 'value', 'Good': 6, 'Bad': 7, 'Lazy': 8}]

2 个答案:

答案 0 :(得分:2)

这是因为您总是在更新相同的dict实例。

解决此问题的一种方法是使用更新的字段创建一个新的本地实例:

for item in main_list:
    updated_dict = dict(dict2, **dict(zip(d, item)))
    list1.append(updated_dict)

请注意,您可以使用列表理解来实现完全相同的事情,这会产生更紧凑(甚至可以说更简洁)的代码。

list1 = [dict(dict2, **dict(zip(d, item))) for item in main_list]

答案 1 :(得分:0)

代替此行list1.append(dict2),请尝试以下操作:

from copy import deepcopy

list1.append(deepcopy(dict2))

您的代码运行良好。唯一的问题是,在下一次迭代中,您每次都会向列表中添加dict2。当您更改dict2时,将更改所有以前添加到列表中的项目。

使用copy模块,您将在列表中创建dict2的副本,并通过更改dict2以前的项目保持原样,以便更好地理解,将print(list1)放在列表中环。