Инициализация словаря с ключами из списка в Python

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для создания словаря с пустыми значениями и ключами из списка используйте метод dict.fromkeys():

Python
Скопировать код
keys_list = ['a', 'b', 'c']
empty_dict = dict.fromkeys(keys_list)

Теперь в empty_dict каждый ключ из keys_list по умолчанию имеет значение None.

Кинга Идем в IT: пошаговый план для смены профессии

Обратите внимание при использовании значений по умолчанию и изменяемых объектов

Если вы хотите задать другое значение по умолчанию, просто добавьте его в dict.fromkeys() как второй аргумент:

Python
Скопировать код
empty_dict_with_zeros = dict.fromkeys(keys_list, 0)

"Ваш словарь наполнен нулями!"

Однако будьте внимательны при присваивании в качестве значения по умолчанию изменяемого объекта методом dict.fromkeys(). Все ключи будут ссылаться на один и тот же объект! 😲

Python
Скопировать код
bad_dict = dict.fromkeys(keys_list, [])

Внесенные изменения в одном списке отразятся в остальных. Чтобы каждый ключ имел свою копию, используйте генераторы словарей:

Python
Скопировать код
safe_dict = {key: [] for key in keys_list}  # Теперь у каждого ключа свой независимый список!

Преимущества генераторов словарей

Генераторы словарей упрощают и эстетично оформляют процесс создания словарей и придают больше гибкости:

Python
Скопировать код
keys_list = ['x', 'y', 'z']
empty_dict = {key: None for key in keys_list}  # Каждый ключ получает своё собственное значение 'None'!

"Закажите 'None' для каждого места!"

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

Использование нестандартного значения по умолчанию с помощью defaultdict!

Если уже надоели банальные значения, collections.defaultdict позволяет задать функцию, генерирующую значения по умолчанию, и гарантирует уникальное создание изменяемых объектов для каждого ключа:

Python
Скопировать код
from collections import defaultdict
default_list_dict = defaultdict(list)  # Пользуйтесь услугами шеф-повара 'list'!

Это очень удобно, когда требуется быстро добавить элемент в список для нового ключа.

Будьте осмотрительны в выборе "дополнения"

Выбирая дополнения для вашего словаря, будьте внимательны, чтобы избежать побочных эффектов от работы с изменяемыми значениями. С использованием генераторов и defaultdict каждый ключ получает свою уникальную порцию, которая защитит вас от нежелательных сюрпризов.

Если важно время: производительность

Когда счет идет на секунды, dict.fromkeys() — это быстрый и удобный способ создания словаря без использования излишних итераций и создания объектов. Это особенно важно при работе с большими объемами данных и когда каждая миллисекунда на счету.

Визуализация

Визуализируем процесс создания словаря с ключами из списка и пустыми значениями в Python:

Список ключей:      [🔑, 🔑, 🔑]
Словарь (результат): {🔑: '📭', 🔑: '📭', 🔑: '📭'}

Пустые почтовые ящики (📭): каждый ключ ожидает своего "письма".

Python
Скопировать код
keys = ['key1', 'key2', 'key3']
your_dict = {k: None for k in keys}  # Почтовые ящики готовы к 'None'-письмам!

"Прекрасный день, чтобы послать 'None' по почте, не так ли?"

Добавим разнообразия в значения None

Иногда хочется предложить ключам пробовать что-то иное, кроме None. В некоторых случаях можно привлечь креативность и разнообразить значения:

Общее стартовое значение

Python
Скопировать код
default_value_dict = {key: 'default' for key in keys_list}

Все ключи по умолчанию получают вкусный апперитив 'default'.

Последовательные значения

Python
Скопировать код
sequence_dict = {key: list(range(3)) for key in keys_list}

Каждому ключу предлагается персональная порция [0, 1, 2].

Индивидуальный гастрономический выбор

Python
Скопировать код
complex_dict = {key: SomeClass() for key in keys_list}

Если SomeClass — это что-то особенное, каждый ключ получит наслаждение от единственного в своем роде экземпляра SomeClass.

Полезные материалы

  1. Документация Python 3.12.1 – Структуры данных — детальный разбор Python словарей.
  2. Использование словаря для подсчета элементов в списке – Stack Overflow — обсуждение работы со словарями на основе практического опыта сообщества.
  3. Словари в Python – Real Python — полный обзор работы со словарями в Python на реальных примерах.
  4. Генераторы словарей в Python – GeeksforGeeks — подходы и приемы эффективного создания словарей с использованием генераторов.
  5. Словарь Python – Как создавать словари в Python – PythonForBeginners.com — понятное и доходчивое руководство по созданию словарей в Python.
  6. Словарь Python (с примерами) – Programiz — от основ до продвинутых приемов работы со словарем в Python.
  7. Словари Python – W3Schools — ознакомьтесь с практикой создания и использования словарей на Python.