0

我写了以下代码:

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 次。问题是什么?

4

2 回答 2

1
dlist.append(d)

问题是您不断将本字典附加d到列表中。即使您更改了值并将其附加,实际上添加到列表中的只是对字典的引用。并且所有对字典的引用都是一样的,因为您只创建了一次字典,稍后只需更改其内容。

因此,每当您想将新对象附加到列表中时,都需要创建一个新字典。

于 2013-09-03T11:19:47.303 回答
0

您需要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)]
于 2013-09-03T11:17:48.793 回答