← Все вопросы
KeyError при подсчёте слов через словарь — как починить?
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})
Ваш ответ
Войдите, чтобы ответить на вопрос.