2016-12-20 1 views
-1

나는 거대한 텍스트 파일을 파일의 각 단어의 줄 번호가 들어있는 사전에 색인을 붙이고 있습니다. 다음 코드는 내가 무엇을 가지고 :파이썬 사전은 항상 어떤 키에 대해서도 같은 값을 반환합니다.

i = {}        # The dictionary 

with open("infl2.txt", "r") as f: 
    for index, line in enumerate(f): # step through each line 
     line = line.lower()   # for case insensitive key matching later on 
     if index == 21:    # Print part of the dictionary for debug 
      print i 
     for w in line.split():  # Split line into words and iterate 
      i[w] = index    # Add word to dictionary with line number as value 


# TESTING 
s = 'aa' 
index = i[s] 
print s + " -> " + str(index) 
print len(i) 

출력 :

{'aa': 1, 'adhs': 12, 'ac': 9, 'ab': 4, 'ad': 11, 'afaik': 17, 'ai': 19, 'afps': 18, 'adrs': 15, 'as': 0, 'abcs': 5, 'aases': 3, 'aids': 20, 'abc': 5, 'abd': 6, 'ads': 11, 'adp': 13, 'aarp': 2, 'abm': 8, 'acth': 10, 'abs': 4, 'abls': 7, 'afp': 18, 'adh': 12, 'abds': 6, 'aec': 16, 'aidses': 20, 'adps': 14, 'adr': 15, 'a': 0, 'aecs': 16, 'adpses': 14, 'acths': 10, 'ais': 19, 'acs': 9, 'ablses': 7, 'aarps': 2, 'afaiks': 17, 'aas': 3, 'abms': 8} 
aa -> 112505 
252362 

당신의 첫 번째 줄에 덤프 O '스무에서 볼 수있는 값 1을 (반환해야합니다,'AA '를 볼 수 있듯이 출력). 그러나 112505을 반환하며 이는 file length (in lines) - 1입니다. 어떤 키를 시험해도 항상 112505을 반환합니다.

왜 이런 일이 발생하는지 잘 모릅니다. 그래서 나는 도움의 손길에 감사 할 것입니다.

+3

색인은 현재 줄 번호입니다. 따라서 사전의 모든 단어는 모든 줄의 모든 단어에 대해 마지막 행 번호로 설정됩니다. – RemcoGerlich

+0

사전의 각 값은 해당 단어가 나타나는 마지막 행이됩니다. – RemcoGerlich

+0

@RemcoGerlich 모든 단어가 마지막 줄에 있으면 yes입니다. –

답변

1

글쎄, derp. 내가 읽던 파일은 결함이있어서 줄 바꿈을 제외하고 마지막 줄에 복사본이 들어있었습니다. 따라서 마지막 행 다음에 동일한 행을 가리키는 모든 값이 처리됩니다. 첫 번째 라인은 0으로 색인됩니다.

+0

그것은 정말로 나쁜 운이다!! –

+0

그래, 나는 github에 AGID라는 영어 사전이있다. 저자는 실수를 한 것으로 보입니다. 실제로 이유가 없으므로 readme에 대해서는 아무 것도 없습니다. – ionree

관련 문제