2016-12-20 1 views
-1

Я индексирую огромный текстовый файл в словарь, содержащий номера строк каждого слова в файле. Следующий код является то, что у меня есть:Python Dictionary всегда возвращает одно и то же значение для любого ключа

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 

Как вы можете видеть, «аа» должна вернуть значение 1 (видно на свалке о»двадцать в первой строке выход). Однако он возвращает 112505, который является file length (in lines) - 1. Независимо от того, с какими ключами я тестирую, он всегда возвращает 112505.

Я понятия не имею, почему это происходит, поэтому я был бы благодарен за помощь.

+3

Вы делаете 'i [w] = index', index - это номер текущей строки. Поэтому, конечно, все слова в словаре устанавливаются на последний номер строки после выполнения этого для всех слов всех строк. – RemcoGerlich

+0

Каждое значение в словаре будет последней строкой, на которой происходит это слово. – RemcoGerlich

+0

@RemcoGerlich да, если все слова находятся в последней строке. –

ответ

1

Ну, derp. Файл, который я читал, был ошибочным и содержал копию самой самой последней строки, за исключением строк новой строки. Следовательно, все значения указывали на одну и ту же строку после последней строки. Минус 1 исходит из того, что первая строка индексируется как 0.

+0

это действительно неудача !! –

+0

Да, это английский словарь, который я получил на github под названием AGID. Похоже, что автор допустил ошибку, так как нет причин для этого и ничего в этом прочитать. – ionree

Смежные вопросы