2015-04-01 46 views
0

我是新來的Python,並試圖從該寫一本字典修真循環尋找Python字典理解:從一個循環我寫

results = [] 
    for line in self.data: 
     if value in line: 
      item = dict(zip(self.keys, line)) 
      results.append(item) 
     continue 
    return results 

self.keys是一個列表self.data是屬於這些鍵的值列表列表。基本上,我有從一個製表符分隔的文本文件(鍵)的頂部值的列表,然後一束用於實際的項目的文件中所表示的值的行的:

[scene, take, camera] 
[12, 1, A] 
[12, 1, B] 
[12, 2, A] 
[12, 2, B] 

等..

我想,

{scene:12, take:1, camera:A} 

我作品的代碼,但我努力學習,所以我想知道,如果有人可以教我怎麼寫,作爲一個理解。

任何幫助,將不勝感激!

感謝,

+1

'繼續'是多餘的 – frnhr 2015-04-01 20:44:20

+0

另外:你聽說過['csv.DictReader'](https://docs.python.org/3.4/library/csv.html#csv.DictReader)嗎? – DSM 2015-04-01 20:44:23

+0

你好馬特。我沒有嘗試任何除了語法錯誤之外的任何東西,所以我沒有把它粘貼在這裏,對不起。 – 2015-04-01 20:47:30

回答

1

什麼我可以從這個問題可以理解,這應該工作

result=[dict(zip(self.keys, line)) for line in self.data if value in line] 
2

試試這個:

return [dict(zip(self.keys, line)) for line in self.data if value in line] 

這實際上是一個列表理解,因爲我們正在建立一個列表。

1

首先,可以簡化您的代碼:

results = [] 
for line in self.data: 
    if value in line: 
     item = dict(zip(self.keys, line)) 
     results.append(item) 
return results 

這說明你的循環是for line in self.data,你的價值是dict(zip(self.keys, line))和你的條件是value in line,所以你把值,然後循環,然後條件 - `[有價值的循環條件]。您的列表理解成爲:

result = [dict(zip(self.keys, line)) for line in self.data if value in line] 
return result 

可以消除result,給你:

return [dict(zip(self.keys, line)) for line in self.data if value in line] 

然而,隨着DSM所指出的,你可以簡單地做:基於

import csv 
with open("...") as f: 
    return list(csv.DictReader(f, fieldnames=next(f).strip().split(), dialect="excel_tab"))