2016-09-29 201 views
-2

我需要在字典列表上循環並檢查值是否存在。如果它存在,那麼我會從同一個字典中獲取另一個值,並將其存儲在另一個列表中的新字典中。我有這個Python:遍歷字典列表並將值提取到新字典

class_copy=[] 
for root, dirs, files in os.walk(files_path+"/TD"): 
    for file in files: 
     file_name=os.path.splitext(file)[0] 
     for d in data_list: 
      if d['id'] == file_name: 
       cc['class']=d['fic'] 
       class_copy.append(cc) 
       break 

所以我循環通過一些文件。 data_list是詞典的列表。這些字典每個都有一個與文件名相匹配的'id',所以當找到值爲'id'的字典'd'時,我在字典'd'上取'fic'的值,並用'類'來存儲'fic'的值。然後,我將這本詞典存儲在一個名爲class_copy的新詞典列表中。

問題是,在遍歷完所有內容後,class_copy中的所有字典都是相同的。我想通過循環和改變d的實例,class_copy上的值也在變化,但我怎麼能保留這些值呢?有一個更好的方法嗎?

+1

難道你不覺得可能會給我們展示如何初始化'class_copy'及其中的對象,以便我們可以告訴您,您有多個對同一個字典的引用? – TigerhawkT3

+0

@ TigerhawkT3我添加了如何將class_copy初始化爲空列表 – Atirag

回答

3

你實際上並沒有創造一個新字典,要更新現有的:

cc['class']=d['fic'] 

簡單地更新與關鍵'class'關聯的值。將您的代碼更改爲:

cc = {'class': d['fic']} 

這將創建一個字典的新實例。

您列表中的所有條目最終都相同的原因是因爲列表中的每個項目都是相同的字典。通過創建一個新的字典,如您所期望的那樣,您將在列表中擁有獨立的實例。

+0

當然。工作很好。謝謝!沒有解釋, – Atirag

0
class_copy.append({'class': d['fic']'}) 
+0

不是很有用 –