我写了以下代码:
d={}
dlist=[]
for x in list1:
d['name']=x.name
d['age']=x.age
for y in list2:
d['gender']=y.gender
dlist.append(d)
列表 1 和列表 2 包含一些对象。我将 dlist 传递给表格以显示内容。通常我有 4 种不同的结果,但显示时只有最后一个结果显示 4 次。问题是什么?
dlist.append(d)
问题是您不断将一本字典附加d
到列表中。即使您更改了值并将其附加,实际上添加到列表中的只是对字典的引用。并且所有对字典的引用都是一样的,因为您只创建了一次字典,稍后只需更改其内容。
因此,每当您想将新对象附加到列表中时,都需要创建一个新字典。
您需要d
在迭代的每个步骤中定义循环内部。此外,您可能希望使用 zip 以在一个循环中循环 list1 和 list2:
dlist=[]
for x, y in zip(list1, list2):
d={'name': x.name, 'age': x.age, 'gender': y.gender}
dlist.append(d)
或者,单线:
dlist = [{'name': x.name, 'age': x.age, 'gender': y.gender} for x, y in zip(list1, list2)]