Простой словарь - PullRequest
       87

Простой словарь

0 голосов
/ 29 февраля 2020

Вопрос просит написать функцию, создающую словарь со счетчиком каждого слова в строке и удаляющую пунктуацию, только если это последний символ в слове. Я пытался решить пунктуацию часть проблемы. Для задания мне нужно определить пунктуацию, используя isalpha, но

  1. Я не уверен, помогает ли использование word[-1] определить, является ли последний символ пунктуацией, а
  2. Я не знаю, как написать оператор else для получения полного словаря.
def word_distribution(s):

    s = s.lower()
    s = s.split()
    wordfreq = {}
    for word in s:
        if word[-1].isalpha():
            if word in wordfreq:
                wordfreq[word] += 1 
            else:
                wordfreq[word] = 1

    return wordfreq

Пример того, что мой код производит ...

word_distribution("Why's it always the nice guys?")
Out : {'always': 1, 'it': 1, 'nice': 1, 'the': 1}

Пример того, что он должен производить .....

Out : {'always': 1, 'it': 1, 'nice': 1, 'the': 1, 'why's': 1, 'guys': 1}

Ответы [ 2 ]

1 голос
/ 29 февраля 2020

Обычно для подсчета вещей вы должны использовать класс collections.Counter, а для проверки, является ли элемент , или ?, вы должны использовать string.punctuation, который их содержит, например:

import string
from collections import Counter
txt = "Why's it always the nice guys?"

counted = Counter(
    word if not word[-1] in string.punctuation else word[:-1] for word in txt.split()
)
print(counted)

>>> Counter({"Why's": 1, 'it': 1, 'always': 1, 'the': 1, 'nice': 1, 'guys': 1})

Теперь, если вам действительно нужен словарь для вывода, просто сделайте:

print(dict(counted))

>>> {"Why's": 1, 'it': 1, 'always': 1, 'the': 1, 'nice': 1, 'guys': 1}
0 голосов
/ 29 февраля 2020

Здравствуйте и добро пожаловать на SO.

Если я понимаю вашу проблему, я думаю, вы просто неправильно написали конструкцию if then else.

import string

def word_distribution(s):
    s = s.lower()
    s = s.split()
    wordfreq = {}
    for word in s:
        if word[-1] in string.punctuation:
            if word[-1] in wordfreq:
                wordfreq[word[:-1]] += 1 
            else:
                wordfreq[word[:-1]] = 1
        else:
            if word in wordfreq:
                wordfreq[word] += 1 
            else:
                wordfreq[word] = 1

    return wordfreq

x = word_distribution("Why's it always the nice guys?")
print(x) 

Я использовал string.punctuation чтобы проверить, является ли последний символ символом пунктуации.

Выходные данные: {"why's": 1, 'it': 1, 'always': 1, 'the': 1, 'nice': 1, 'guys': 1}

Редактировать: Другое решение, использующее isalpha:

def word_distribution(s):
    s = s.lower()
    s = s.split()
    wordfreq = {}
    for word in s:
        if word[-1].isalpha():
            if word[-1] in wordfreq:
                wordfreq[word] += 1 
            else:
                wordfreq[word] = 1
        else:
            if word in wordfreq:
                wordfreq[word[:-1]] += 1 
            else:
                wordfreq[word[:-1]] = 1

    return wordfreq

x = word_distribution("Why's it always the nice guys?")
print(x)

Выходные данные это: {"why's": 1, 'it': 1, 'always': 1, 'the': 1, 'nice': 1, 'guys': 1}

...