← Все вопросы

KeyError при подсчёте слов через словарь — как починить?

Задан 8 месяцев назад339 просмотров2 ответа
7

Считаю, сколько раз каждое слово встречается, но падает с KeyError:

words = ["кот", "пёс", "кот"]
count = {}
for w in words:
    count[w] = count[w] + 1
print(count)

Как правильно?

2 ответа

12
✓ Принятый ответ — помог автору

В первый раз, когда встречается слово, ключа w в словаре ещё нет — а ты сразу пытаешься прочитать count[w]. Чтения несуществующего ключа и вызывают KeyError.

Используй .get(w, 0), который вернёт 0, если ключа ещё нет:

for w in words:
    count[w] = count.get(w, 0) + 1

Теперь для нового слова берётся 0 и прибавляется 1 — ошибки нет.

6

Ещё удобнее — collections.Counter, он создан ровно для этого:

from collections import Counter
count = Counter(words)
print(count)  # Counter({'кот': 2, 'пёс': 1})

Ваш ответ

Войдите, чтобы ответить на вопрос.