2013-10-10 169 views
0

我不確定我所擁有的是實際上是否創建了新字典。我想把一個文件當前在每行上用逗號分隔兩個單詞,並將它變成一個字典,其中第一個單詞是鍵,第二個單詞是值。我看到,如果我打印,單詞是分開的,但我不確定它是否正確返回。由於將文件轉換爲鍵/值字典

WDictionary = open('file.csv', 'r') 
for line in WDictionary: 
    mylist = line.split(',') 
    return mylist 
+0

我認爲你的縮進是關閉的 –

回答

3
dict(line.split(',') for line in WDictionary) 

編輯:作爲建議

dict(line.strip().split(',') for line in WDictionary) 
+0

可能想拋出一個'map(str.strip,line.split(','))'那裏擺脫新行 – Claudiu

+0

擺脫新行是一個好主意,但在我看來'dict(line.strip()。split(',')for line in WDictionary)'比使用map更清晰。爲了擺脫內部空白,'map'版本可能會更好(如果需要的話)。 –

+1

由於你是新的 - 答案使用的語法稱爲詞典理解。這是通過遍歷WDictionary並將每行結果添加到新字典的簡便方法。 – thumbtackthief

2

使用CSV模塊

import csv 
with open('some.csv', 'rb') as f: 
    reader = csv.reader(f) 
    for row in reader: 
     print row 

他們已經解決了,你正在試圖解決的問題,其中包括引號問題,迭代線,並解析出來:)

你可以嘗試這樣的事情對你的代碼:

import csv 
def readACSV(): 
    with open('file.csv', 'r') as WDictionary 
    reader = csv.reader(WDictionary) 
    for row in reader: 
     yield row 

for line in readACSV(): 
    print line 

不知道是否有幫助,但如果一個小的使用示例你不確定如何使用它。

+0

第二個例子的目的是什麼,而不是直接迭代讀者?即使你想隔離打開文件,只需從'readACSV'直接返回讀卡器,而不是不必要地在其周圍纏繞另一個發生器。 –

+0

你是對的,我試圖將其納入OP的例子中 – mlnyc