подсчитайте количество букв, встречающихся в строке, и добавьте букву и количество раз, когда это встречается в словаре, в виде пары ключ-значение - PullRequest
0 голосов
/ 08 марта 2020

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

вот что у меня есть

def count_letters(text):
    result = {}
    for letter in text:
        if letter.isalpha():
            if result[letter.lower()]:
                result[letter.lower()] += 1
            result[letter.lower()] = 1
    return(result)

Я подумал, что если ключевой результат [буква] не существует, следует пропустить оператор if

if result[letter.lower()]:

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

Я ожидаю, если

text = "This is a sentence."

, тогда моя функция должна вернуть

{'t': 2, 'h': 1, 'i': 2, 's': 3, 'a': 1, 'e': 3, 'n': 2, 'c': 1}

Я пытаюсь делайте это без импорта каких-либо модулей, это упражнение для изучения моих словарей.

Ответы [ 2 ]

1 голос
/ 08 марта 2020

Попробуйте:

def count_letters(text):
    result = {}
    for letter in text:
        if letter.isalpha():
            if letter.lower() in result.keys():
                result[letter.lower()] += 1
            else:
                result[letter.lower()] = 1
    return(result)
1 голос
/ 08 марта 2020

Выдает ошибку ключа, потому что этот ключ еще не существует. Вместо этого используйте попытку-исключение:

lower = letter.lower()  # Only need to do this once
try:
    result[lower] += 1
except KeyError:
    result[lower] = 1

Также FWIW, канонический способ сделать это с collections.Counter, например:

collections.Counter(c.lower() for c in text if c.isalpha())
...