2013-05-15 52 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