2016-12-12 3 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

니스. 방금 "iterables의 왼쪽에서 오른쪽으로의 평가 순서가 보장된다"는 것을 배웠기 때문에,''zip()' '이 포함 된 dict comprehension은 똑같은 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