2013-10-10 136 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