Подсчёт с помощью словаря
Словари отлично подходят для подсчёта. Допустим, класс голосует за место школьной поездки, а голоса у вас лежат в списке:
votes = ["зоопарк", "замок", "зоопарк", "аквапарк", "зоопарк", "замок"]Сколько голосов получило каждое место? Создайте словарь, в котором ключи — места, а значения — числа голосов. Начните с пустого словаря и пройдите по голосам один за другим. Если место уже есть в словаре, прибавьте 1 к его числу; если ещё нет, добавьте его с числом 1:
votes = ["зоопарк", "замок", "зоопарк", "аквапарк", "зоопарк", "замок"]
counts = {}
for vote in votes:
if vote in counts:
counts[vote] += 1
else:
counts[vote] = 1
print(counts){'зоопарк': 3, 'замок': 2, 'аквапарк': 1}Зачем нужен if? При первом голосе "зоопарк" ещё нет в counts. counts[vote] += 1 сначала должно было бы прочитать counts["зоопарк"], и программа завершилась бы ошибкой KeyError: 'зоопарк'.
С помощью .get() то же самое можно написать в одну строку. counts.get(vote, 0) даёт число голосов, которое у места уже есть, или 0, если его ещё нет в словаре. Вы прибавляете к нему 1 и сохраняете результат под тем же ключом:
votes = ["зоопарк", "замок", "зоопарк", "аквапарк", "зоопарк", "замок"]
counts = {}
for vote in votes:
counts[vote] = counts.get(vote, 0) + 1
print(counts){'зоопарк': 3, 'замок': 2, 'аквапарк': 1}Оба варианта делают одно и то же; пользуйтесь тем, который понятнее вам. Более короткий вы часто увидите в чужом коде.
Так же можно считать всё, по чему можно пройти циклом for: слова в списке или буквы в тексте.
Задание
- 1
Посчитайте, сколько раз каждая буква встречается в
word. Создайте пустой словарьcounts, пройдите по слову буква за буквой цикломforи посчитайте буквы, как в примере. Затем выведитеcounts:{'а': 5, 'б': 2, 'р': 2, 'к': 1, 'д': 1}. - 2
Ниже пройдите по
countsс помощью.items()и выведите буквы, которые встречаются больше одного раза, каждую с её числом, напримера: 5.