if при подсчете элементовОдин из самых частых паттернов у новичков — использование условий для проверки наличия ключа в словаре при подсчете. Это работает, но выглядит громоздко и совсем не «по-питонячьи».
❌ Как делать не стоит (многословно):
counts = {}
for item in items:
if item in counts:
counts[item] += 1
else:
counts[item] = 1
✅ Используйте `defaultdict` из модуля `collections`
Это специальный тип словаря, который сам создает дефолтное значение для ключа, если его еще нет в объекте:
from collections import defaultdict
counts = defaultdict(int) # указываем тип int как дефолтный (даст 0)
for item in items:
counts[item] += 1
Когда вы инициализируете
defaultdict(int), вы говорите Python: «Если ключа нет, создай его и присвой значение, которое возвращает функция int(), то есть **0**».Преимущества:
— Никаких проверок
if item in counts.— Логика становится линейной и понятной с первого взгляда.
— Меньше шансов допустить ошибку в условиях или инициализации.
Если вам нужно просто посчитать элементы в итерируемом объекте, в Python есть еще более мощный инструмент —
Counter:
from collections import Counter
counts = Counter(items)
print(counts.most_common(3)) # Бонус: сразу получаем топ-3 элемента
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека питониста
#буст
