Формируйте то, что вы делаете, я подозреваю, что следующее вам идеально подойдет:
from collections import defaultdict
text = ( "cat", "dog", "rat", "bat", "rat", "dog",
"man", "woman", "child", "child") #
d = defaultdict(list)
for lineno, word in enumerate(text):
d[word].append(lineno)
print d
Это дает вам вывод:
defaultdict(<type 'list'>, {'bat': [3], 'woman': [7], 'dog': [1, 5],
'cat': [0], 'rat': [2, 4], 'child': [8, 9],
'man': [6]})
Это просто устанавливает пустой словарь по умолчанию, содержащий список для каждого элемента, к которому вы обращаетесь, так что вам не нужно беспокоиться о создании записи, а затем перечисляет его путь по списку слов, так что вы не необходимо отслеживать номер строки.
Поскольку у вас нет списка правильных вариантов написания, он фактически не проверяет правильность написания слов, просто создает словарь из всех слов в текстовом файле.
Чтобы преобразовать словарь в набор слов, попробуйте:
all_words = set(d.keys())
print all_words
Который производит:
set(['bat', 'woman', 'dog', 'cat', 'rat', 'child', 'man'])
Или просто напечатать слова:
for word in d.keys():
print word
Редактировать 3:
Я думаю, что это может быть окончательная версия:
Это (намеренно) очень грубая, но почти полная проверка орфографии.
from collections import defaultdict
# Build a set of all the words we know, assuming they're one word per line
good_words = set() # Use a set, as this will have the fastest look-up time.
with open("words.txt", "rt") as f:
for word in f.readlines():
good_words.add(word.strip())
bad_words = defaultdict(list)
with open("text_to_check.txt", "rt") as f:
# For every line of text, get the line number, and the text.
for line_no, line in enumerate(f):
# Split into seperate words - note there is an issue with punctuation,
# case sensitivitey, etc..
for word in line.split():
# If the word is not recognised, record the line where it occurred.
if word not in good_words:
bad_words[word].append(line_no)
В конце bad_words
будет словарём с нераспознанными словами в качестве ключа и номерами строк, в которых слова были в качестве совпадения.