-2

我想在每个循环中创建一个临时字典,然后将它放在一个列表中,这样我就可以拥有一个字典列表。这是代码:

dicts=[]
tempdic={}
for i in range(0, len(self.info)):
    tempdic.clear()
    tempdic['title']=str(self.info[i]['title'])
    tempdic['desc']=str(self.info[i]['desc'])
    dicts.append(tempdic)

问题是,当我在每个循环中更改 tempdic 时,dicts(list) 的内容也会随之更改,因此最后,我有一个包含多个 dicts 的列表,它们都具有相同的内容。

4

4 回答 4

3

您正在重置循环中的同一dict对象,并在列表中添加对它的引用。您需要dict在每次迭代时创建新对象:

for i in range(0, len(self.info)):
    tempdic = dict()
于 2013-10-13T18:29:43.777 回答
2

您需要移动此行:

tempdic={}

循环内:

dicts=[]
for i in range(0, len(self.info)):
    tempdic={}
    tempdic['title']=str(self.info[i]['title'])
    tempdic['desc']=str(self.info[i]['desc'])
    dicts.append(tempdic)

这样,每次循环迭代都会创建一个新字典。另外,请注意我删除了tempdic.clear(),因为不再需要它。

实际上,这项工作可以像这样简单得多:

dicts=[]
for i in range(0, len(self.info)):
    dicts.append({'title':str(self.info[i]['title']), 'desc':str(self.info[i]['desc'])})

如您所见,实际上不需要 make tempdic

于 2013-10-13T18:30:41.347 回答
1

收拾:

 dicts=[]
 for item in self.info:
        tempdic={} # must create a new dictionary inside the loop
        tempdic['title'] = str(item['title'])
        tempdic['desc'] = str(item['desc'])
        dicts.append(tempdic)

并进一步

 dicts=[]
 for item in self.info:
        tempdic={'title': str(item['title'], 'desc': str(item['desc']}
        dicts.append(tempdic)

并进一步

dicts = [{'title' : str(x['title']), 'desc' str(x['desc'])} for x in self.info)
于 2013-10-13T18:30:54.803 回答
0
for i in range(0, len(self.info)):
    dicts.append({
        'title': str(self.info[i]['title']),
        'desc': str(self.info[i]['desc'])
    })
于 2013-10-13T18:33:10.097 回答