如何将dict附加到循环中的列表中

时间:2013-10-13 18:28:38

标签: python dictionary

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

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)的内容也随之改变,以便最后,我有一个列表,其中包含几个都具有相同的值内容。

4 个答案:

答案 0 :(得分:3)

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

for i in range(0, len(self.info)):
    tempdic = dict()

答案 1 :(得分: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'])})

如您所见,实际上并不需要制作tempdic

答案 2 :(得分: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)

答案 3 :(得分:0)

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