Проверка наличия слова в словаре в цикле for - PullRequest
0 голосов
/ 10 ноября 2019

Попытка создать словарь с количеством слов из файла .txt в for loop

def countWords(filename):
    wordlist = {} 
    infile = open(filename)

    for line in infile:
        for word in line.split():
            if str(word) in wordlist == True :
                wordlist[word] += 1
                print("old found word")
            else:
                wordlist[word] = 1 
                print(" NOT found old word")
    return wordlist  

Я ожидаю, что эта функция создаст вывод списка слов со словами, перечисленными вместе с их количеством по всему текстуфайл. вместо этого цикл постоянно печатает «НЕ найдено старое слово» и выводит словарь списка слов, в котором будут перечислены все слова, но все их значения равны = 1.

Ответы [ 3 ]

2 голосов
/ 10 ноября 2019

Во-первых, вам не нужно писать str(word) in wordlist == True, str(word) in wordlist будет достаточно.

Во-вторых, нет необходимости преобразовывать слово из файла в str класс.

В-третьих, при открытии файла рекомендуется использовать оператор with, чтобы предотвратить некоторые утечки памяти, поэтому будет

with open(filename) as infile:
    #your_code

Четвертым, если строки print ненеобходимо, было бы больше pythonic написать что-то вроде этого:

from collections import Counter

text = """Lorem ipsum dolor sit amet, consectetuer adipiscing elit, 
    sed diam nonummy nibh euismod tincidunt ut laoreet dolore 
    magna aliquam erat volutpat"""
wordline = dict(Counter(text.split())

Удачи в вашей задаче!

1 голос
/ 10 ноября 2019

Строка

if str(word) in wordlist == True :

оценивается следующим образом:

сначала выполняется утверждение wordlist == True и возвращается False. Это приводит к выражению if str(word) in False :, которое также False.

Следовательно, оператор else: срабатывает.

Чтобы исправить это, вы можете пропустить == True:

if str(word) in wordlist:

или использовать скобки:

if (str(word) in wordlist) == True :

Хотя последнее не имеет особого смысла.

0 голосов
/ 10 ноября 2019

Исходя из вашего желаемого результата, я бы изменил проверку ключа в словаре на

if str(word) in wordlist:

, предоставив вам следующую функцию.

def countWords(filename):
    wordlist = {}
    infile = open(filename)

    for line in infile:
        for word in line.split():
            if str(word) in wordlist:
                wordlist[word] += 1
                print("old found word")
            else:
                wordlist[word] = 1
                print(" NOT found old word")
    return wordlist
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...