2016-12-12 113 views
0

如何逐行讀取文本文件並將奇數行分配給字典的鍵和將偶數行分配給字典的值?例如,我怎麼可能讓下面的新行分隔的列表:將文本文件讀入字典

A 
B 
C 
D 
E 
F 
G 
H 

進入一個字典是這樣的:

dict{"A":"B","C":"D","E":"F","G":"H"} 
+0

到目前爲止你有什麼代碼? – dhke

回答

3
with open(filename, 'r') as f: 
    d = {} 
    for line in f: 
     d[line.strip()] = next(f, '').strip() 

注意:如果你的文件有一個奇數行的你最後一個鍵將有一個空白值。如果您希望拋出異常,請將next(f, '')更改爲next(f)。如果您更喜歡不同的默認更改next(f, '')next(f, 'default')

另一種方式:

with open(filename, 'r') as f: 
    d = {k.strip():v.strip() for k, v in zip(f, f)} 

注意,如果文本文件有一個奇數行的它會掉落最後的關鍵。

from itertools import izip_longest, imap 
with open(filename, 'r') as f: 
    f = imap(str.strip, f) 
    d = dict(izip_longest(f, f, fillvalue='default')) 
+1

不錯。我剛剛瞭解到「迭代器的從左到右的評估順序是有保證的」,所以用'zip()'傳遞相同迭代器的dict理解很好地工作。 [見zip()文檔](https://docs.python.org/3/library/functions.html#zip) –

-1

其實,你只需要在一個文件中,並循環通過它來閱讀:

要當有奇數行做保留最後的關鍵。如果一條線是奇怪的,記住它作爲值,如果一條線甚至將其附加到字典中,並將該線作爲關鍵字。

import sys 
import numpy as np 

fn=sys.argv[1] 

d={} 

with open(fn,'rb') as f: 

for i,line in enumerate(f): 

    if np.mod(i+1,2)==0: 
     d[lastVal]=line.replace('\n','') 
    else: 
     lastVal=line.replace('\n','') 

print d