2013-05-15 177 views
-2

file.txt的列表到字典蟒蛇

Harry Moon, Meteor \n roger gim, astronaut \n john banks, westpac \n john banks, ASB 

代码:

FILE=file.txt 
filename=open(FILE,"rt") 
fileread=filename.readlines() 
fileread.sort() 
for i in fileread: 
    dict={} 
    dict[i.split(',')[0]]=i.split(',')[1] 
    print dict 

就这样,我就能够获取以下信息:

{'Harry Moon': ' Meteor\n'} 
{'john banks': ' ASB'} 
{'john banks': ' westpac\n'} 
{'roger gim': ' astronaut\n'} 

然而,我想要的是:

{ 'Harry Moon': ' Meteor' 
    , 'john banks': ' ASB' 
    , 'john banks': ' westpac' 
    , 'roger gim': 'astronaut' } 
+2

你不能得到你想要的东西,因为你的例子有两个'约翰banks'键,而没有按没有工作。像'约翰银行'这样的东西:['ASB','westpac']'是否会起作用,即使用列表作为值? – DSM

+0

哦,但它必须工作,因为我被要求将具有不同值的多个重复键的文件转换成字典。所以,我希望通过识别分隔符来分割键和值,在这种情况下','并计划将该分割列表转换为字典,这样我就可以调用任何键来获得它们的值,即使它们有重复的n个重复项关键不必显示,只是价值。 – rendy

+0

在Python控制台输入'd = {'john banks':'ASB','john banks':'westpac'}'。然后'打印d'。 – DSM

回答

1
dict([line.strip().split(',') for line in open(FILE).readlines()]) 
+0

击败我:D简洁的答案。 – b10hazard

+0

+1的精简方法 – Schorsch

+0

其实,这可能会更浓缩。对readline的调用并不是必需的,因为文件对象在遍历它们时已经是可迭代的并且产生了行。 –

0

试试这个....

file_str = open(FILE).read() 

d = {} 
for line in file_str.splitlines(): 
    d[line.split(',')[0]] = line.split(',')[1] 

print d 

还有约翰·史密斯选配答案,因为真正简洁的代码。

1

不使用“字典”作为变量名,打开文件时也使用with

with open('file.txt') as f: 
    result = dict(line.strip().split(',') for line in f) 
+0

我会试试这个,谢谢你elyase,如果我不能安排给出的脚本,我会再次弹出。干杯 – rendy