2015-03-27 2 views
2

Моя программа открывает файл, и он может подсчитывать слова, содержащиеся в нем, но я хочу создать словарь, состоящий из всех уникальных слов в тексте , например, если слово ' компьютер "появляется три раза, я хочу, чтобы это считалось единственным уникальным словомКак создать словарь для текстового файла

def main(): 

    file = input('Enter the name of the input file: ') 
    infile = open(file, 'r') 

    file_contents = infile.read() 

    infile.close() 

    words = file_contents.split() 

    number_of_words = len(words) 

    print("There are", number_of_words, "words contained in this paragarph") 

main() 

ответ

2

Использовать набор. Это будет включать в себя только уникальные слова:

words = set(words) 

Если вы не заботитесь о том случае, вы можете сделать это:

words = set(word.lower() for word in words) 

Это предполагает, что нет знаков препинания. Если есть, вам нужно будет лишить пунктуацию.

import string 
words = set(word.lower().strip(string.punctuation) for word in words) 

Если вам необходимо отслеживать, сколько из каждого слова, которое вы имеете, просто заменить set с Counter в приведенных выше примерах:

import string 
from collections import Counter 
words = Counter(word.lower().strip(string.punctuation) for word in words) 

Это даст вам словарь-подобный объект, который говорит вы сколько из каждого слова есть.

Вы также можете получить количество уникальных слов из этого (хотя это медленнее, если это все, что вы заботитесь о):

import string 
from collections import Counter 
words = Counter(word.lower().strip(string.punctuation) for word in words) 
nword = len(words) 
0

@TheBlackCat его решение работает, но только дает вам, сколько уникальных слов в строке/файле. Это решение также показывает, сколько раз оно происходит.

dictionaryName = {} 
for word in words: 
    if word not in list(dictionaryName): 
     dictionaryName[word] = 1 
    else: 
     number = dictionaryName.get(word) 
     dictionaryName[word] = dictionaryName.get(word) + 1 
print dictionaryName 

протестирован с:

words = "Foo", "Bar", "Baz", "Baz" 
output: {'Foo': 1, 'Bar': 1, 'Baz': 2} 
+0

1. '' 'dictionaryName''' как имя переменным нарушает PEP-0008. 2. Нет необходимости делать '' 'если слово не в списке (имя словаря)' '', потому что вы можете просто получить значение с помощью словарного ключа или значения по умолчанию, если ключ не существует. –

0

, вероятно, более чистым и быстрым решением:

words_dict = {} 
for word in words: 
    word_count = words_dict.get(word, 0) 
    words_dict[word] = word_count + 1 
Смежные вопросы