2017-10-16 1 views
-1

이름을 키로 사용하는 코드와 의 튜플 인 해당 값을 갖는 코드가 있습니다. 이름 뒤의 첫 번째 숫자는 해당 튜플에있는 의 숫자를 제어합니다 (튜플에 포함 된 숫자는 왼쪽에서 오른쪽으로 입니다). 예를 들어, 텍스트 행 "Ali 6 7 6 5 12 31 61 9"은 이름 다음에 첫 번째 숫자로 6을 가지며이 텍스트 행 은 키워드 "Ali"를 가진 사전 항목이되고 해당 값은 다음 6 개의 정수로 구성된 터플입니다 "Ali ": (7, 6, 5, 12, 31, 61). 사전과 파이썬으로 텍스트 파일을 사용하여

는 예상 출력 그래서 난하지만 난 '이

def get_names_num_tuple_dict(filename):  
    file_in = open(filename, 'r') 
    contents = file_in.read() 
    file_in.close() 
    emty_dict = {} 
    for line in contents: 
     data = line.strip().split() 
     key = data[0] 
     length = int(data[1]) 
     data = tuple(data[2:length + 2]) 
     emty_dict[key] = data 

    return emty_dict 

같이했던

Ali : (7, 6, 5, 12, 31, 61) 
Bella : (2, 6, 2, 2, 30) 
Elmo : (3, 8, 6, 8) 
Gill : (9, 7) 
Jin : (26, 51, 3) 

입니다

Bella 5 2 6 2 2 30 4 8 9 2 
    Gill 2 9 7 54 67 
    Jin 3 26 51 3 344 23 
    Elmo 4 3 8 6 8 
    Ali 6 7 6 5 12 31 61 9 

에서 내가 코드를 가지고있어 영화 이 오류가있는 m 길이 = int (데이터 [1]) IndexError : 목록 인덱스가 범위를 벗어났습니다.

아무도 도와 줄 수 있습니까? 정말 도움이 될 것입니다. 나는 처음으로 학습하면서 사전에 약간 약하다. 다음 코드

+0

당신은 심지어 디버거를 사용하려고 했습니까? –

+0

그 기능에 대해 알지 못했습니다 .... 파이썬 프로그램에서 어디에 있습니까? – dipte

답변

1

사용 :

def get_names_num_tuple_dict(filename):  
    emty_dict = {} 
    with open(filename) as f: 
     for line in f: 
     data = line.strip().split() 
     key = data[0] 
     length = int(data[1]) 
     data = tuple(data[2:length + 2]) 
     emty_dict[key] = data 

    return emty_dict 


print(get_names_num_tuple_dict('my_filename')) 

출력 :

여기
{'Bella': ('2', '6', '2', '2', '30'), 'Gill': ('9', '7'), 'Jin': ('26', '51', '3'), 'Elmo': ('3', '8', '6', '8'), 'Ali': ('7', '6', '5', '12', '31', '61')} 
0

가 발생하는 것입니다 :

contents = file_in.read() 

는 문자열로 파일을 읽어들입니다. 이 문자열을 반복하면 문자로 이동하고 IndexError: list index out of range을 줄 수 있습니다.

기본적으로 사용해보십시오 :

for line in file_in: 
    data = line.strip().split() 
     ... 
관련 문제