2013-10-13 48 views
-2

我想在每個循環中創建一個temp字典,然後將其放入列表中,以便我可以擁有一個dicts列表。下面是代碼:如何將dict附加到循環中的列表

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(列表)中的內容也與變化,使,在最後,我有幾個類型的字典列表都有相同的內容。

+1

'dicts'是列表的壞變量名。 –

回答

3

您正在重置循環中相同的dict對象,並在列表中添加對該對象的引用。您需要在每次迭代創建新dict對象:

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

謝謝你:) – user2079550

+0

@ user2079550不客氣:) –

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

+1

@Downvoter - 爲什麼downvote?你有沒有發現我的文章有問題?如果是這樣,請讓我知道,這樣我就可以解決它。 – iCodez

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) 
+0

謝謝你 – user2079550

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