2016-12-12 28 views
0

テキストファイルを1行ずつ読み込み、奇数行を辞書のキーに割り当て、偶数行を辞書の値に割り当てるにはどうすればよいですか? テキストファイルを辞書に読み込む

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

ニース。私はちょうど "iterablesの左から右への評価順序が保証されている"ことを知ったので、 '' zip() ''のディクテーションの理解は同じiterableをうまく通しています。 [zip()docsを参照](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   
関連する問題