0Pricing
Python Academy · Урок

defaultdict

Автоматически инициализируйте значения словаря

«defaultdict» — бесплатный урок Python Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.

Проблема отсутствующего ключа

В обычном dict обращение к несуществующему ключу вызывает исключение KeyError. Это неудобно, когда нужно постепенно накапливать значения.

d = {}
try:
    d['x'].append(1)
except KeyError as e:
    print('KeyError:', e)

Знакомство со словарём значений по умолчанию

defaultdict из модуля collections принимает функцию-фабрику, которая создаёт значение по умолчанию для любого отсутствующего ключа. Импортируйте его с помощью from collections import defaultdict.

from collections import defaultdict
d = defaultdict(int)
print(d['missing'])
print(dict(d))

Подсчёт с помощью целых чисел

В defaultdict(int) для отсутствующих ключей по умолчанию используется 0, поэтому можно увеличивать значение, не проверяя ключ заранее.

from collections import defaultdict
counts = defaultdict(int)
for ch in 'banana':
    counts[ch] += 1
print(dict(counts))

Группировка с помощью списка

defaultdict(list) создаёт пустой список для новых ключей, что идеально подходит для объединения элементов в группы.

from collections import defaultdict
groups = defaultdict(list)
words = ['apple', 'ant', 'bee', 'bear']
for w in words:
    groups[w[0]].append(w)
print(dict(groups))

Сбор с помощью множества

Используйте defaultdict(set), если для каждого ключа нужны уникальные значения. Дубликаты удаляются автоматически.

from collections import defaultdict
seen = defaultdict(set)
pairs = [('a', 1), ('a', 1), ('a', 2), ('b', 3)]
for k, v in pairs:
    seen[k].add(v)
print(dict(seen))

Фабрика должна быть вызываемым объектом

Аргументом должен быть вызываемый объект, который не принимает аргументов и возвращает значение по умолчанию. Подходят int, list, set и dict, потому что их вызов возвращает пустое значение.

from collections import defaultdict
print(int())
print(list())
print(set())

Пользовательское значение по умолчанию с lambda

Можно передать любой вызываемый объект без аргументов, например lambda, чтобы возвращать пользовательское значение по умолчанию.

from collections import defaultdict
scores = defaultdict(lambda: 100)
print(scores['new_player'])
scores['alice'] -= 10
print(dict(scores))

Вложенные словари значений по умолчанию

Фабрика может сама создавать defaultdict, позволяя строить вложенные структуры без ручной настройки.

from collections import defaultdict
table = defaultdict(lambda: defaultdict(int))
table['fruit']['apples'] += 3
table['fruit']['pears'] += 2
print(table['fruit']['apples'])
print(table['fruit']['pears'])

Обращение создаёт ключ

Обратите внимание: простое чтение отсутствующего ключа добавляет его со значением по умолчанию. После обращения ключ существует в словаре.

from collections import defaultdict
d = defaultdict(int)
_ = d['ghost']
print('ghost' in d)
print(dict(d))

Проверка без добавления

Чтобы проверить ключ, не создавая его, используйте метод .get() или оператор in — они никогда не запускают фабрику.

from collections import defaultdict
d = defaultdict(int)
print(d.get('safe', 'default'))
print('safe' in d)
print(dict(d))

Преобразование обратно в словарь

Оберните defaultdict в dict(), если нужен обычный словарь, например перед возвратом из функции или аккуратным выводом.

from collections import defaultdict
dd = defaultdict(list)
dd['a'].append(1)
plain = dict(dd)
print(type(plain))
print(plain)

Быстрая проверка

Что обозначает аргумент, передаваемый в defaultdict?

Повторение: словарь значений по умолчанию

Главное:

  • defaultdict(factory) автоматически создаёт значения для отсутствующих ключей;
  • int возвращает 0 (для подсчёта), list — [] (для группировки), set — пустое множество (для группировки уникальных значений);
  • Фабрикой может быть любой вызываемый объект без аргументов, включая lambda;
  • Чтение отсутствующего ключа добавляет его; для безопасной проверки используйте .get() или in.
from collections import defaultdict
g = defaultdict(list)
for w in ['cat', 'cow', 'dog']:
    g[w[0]].append(w)
print(dict(g))

Часто задаваемые вопросы

Урок «defaultdict» бесплатный?

Да — полный текст урока «defaultdict» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.

Чему я научусь в уроке «defaultdict»?

Автоматически инициализируйте значения словаря Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Python Academy?

Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «defaultdict»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Python Academy?

Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Counter
  2. defaultdict
  3. deque
  4. namedtuple и OrderedDict
← Назад к Python Academy