Истории успеха наших клиентов — лучшие проекты
Вход/ Регистрация

Как преобразовать список в словарь Python

5678
12 минут чтения
Средний рейтинг статьи: 5

В языке программирования Python есть несколько базовых структур для хранения данных.

Однако, наиболее популярные из них:

  • Список (list): значения с индексами.
  • Словарь (dict): значения с ключами.

Преобразование данных из одного типа в другой — важнейшая составляющая любого языка программирования с динамической типизацией. И, разумеется, Python не исключение.

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

Все примеры, показанные в этой статье, выполнялись с использованием интерпретатора Python версии 3.10.12 в операционной системе Ubuntu 22.04, запущенной на облачном сервере Timeweb Cloud.

Тип списка — list

Список (list) — это упорядоченная структура данных типа «индекс — значение».

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

    

Структуру списка можно вывести в консоль:

    

Выглядеть она будет так:

    

Доступ к значениям списка осуществляется по индексам:

    

VDS и VPS

Гибкие виртуальные серверы с почасовым
биллингом по всему миру: Россия, Азия и Европа.

Тип словаря — dict

Словарь (dict) — это неупорядоченная структура данных типа «ключ — значение».

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

    

Вывести структуру словаря в консоль можно следующим образом:

    

Выглядеть она будет так:

    

Доступ к значениям словаря осуществляется по ключам:

    

Преобразование list в dict

Преобразовать список в словарь можно несколькими способами:

  • Использовать функцию dict.fromkeys(), которая создает новый словарь с ключами из списка.
  • Использовать генератор словаря со вспомогательными функциями и условными операторами.

Последний вариант предоставляет более гибкие возможности для генерации новых словарей из уже существующих списков.

Ключи словаря из списка с помощью функции dict.fromkeys()

Самый простой способ создать словарь из списка — взять элементы экземпляра list и сделать их ключа экземпляра dict. При этом для всех ключей нового словаря, если нужно, добавить значение по умолчанию.

Сделать это можно с помощью стандартной функции dict.fromkeys(). При этом для всех ключей установить значение по умолчанию можно, а для каждого отдельного ключа — нельзя.

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

    

Консольный вывод будет следующим:

    

Словарь из списка с помощью генератора словаря

Еще один способ превращения списка в ключи словаря — так называемый генератор словаря.

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

Вот так выглядит создание словаря из списка с помощью генератора:

    

Консольный вывод будет аналогичным:

    

В Python объект None — это стандартное для большинства языков программирования специальное значение null, которое означает отсутствие какого-либо значения. Объект None имеет тип NoneType:

    

Словарь из списка с помощью генератора словаря и функции zip()

Более продвинутый способ — использовать 2 списка для генерации словаря. Один — для ключей, другой — для их значений.

Для этих целей существует специальная функция zip(), с помощью которой можно выполнять итерацию сразу по нескольким объектам. В простых циклах эта функция используется так:

    

Вывод в консоли будет таким:

    

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

В этом случае синтаксис записи генератора словаря не сильно отличается от обычного перебора:

    

Консольный вывод будет таким:

    

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

    

Вывод будет следующим:

    

Таким образом итерация в генераторе пароля выполняется по самому короткому из списков.

Тем не менее, код выше можно записать в крайне лаконичной форме:

    

Консольный вывод будет такой же, как и предыдущие:

    

Словарь из списка с помощью генератора словаря, функции zip() и условия

Логика реальных приложений как правило сложнее показанных выше примеров — иногда необходимо преобразовывать списки в словари с учетом определенных условий.

Например, некоторые элементы должны попадать в новый словарь в измененном виде или не должны попадать совсем.

Для этого в генераторе словаря есть возможность создавать условия:

    

В этом случае консольный вывод окажется таким:

    

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

    

Таким образом в консольный вывод становится следующим:

    

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

Сделать генерацию словаря еще сложнее и гибче можно с помощью комбинации операторов if и else:

    

Консольный вывод будет следующим:

    

Сложный словарь из простого списка

Во всех предыдущих примерах словарь создавался из двух списков. А что, если ключи и значения, необходимые для создания нового словаря, находятся в одном списке?

В этом случае потребуется усложнить логику генератора словаря:

    

В консольном терминале появится уже привычный вывод:

    

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

В этом случае логика генератора становится немного иной:

    

Вывод в терминал консоли не отличается от предыдущих:

    

Преобразование dict в list

Преобразовать словарь в список — довольно простая задача. Правда правильнее было бы называть это «извлечением» данных.

Из одного словаря можно получить несколько списков:

  • Список ключей
  • Список значений
  • Список пар «ключ — значение»

Сделать это можно следующими методами:

    

Вывод в терминале будет таким:

    

Заключение

Список и словарь — это структуры данных в языке программирования Python, которые по-разному хранят данные и осуществляют доступ к ним.

Словарь более информативен, чем список: он хранит данные в виде пар «ключ — значение», в то время как список содержит только значения, к которым доступ осуществляется по индексам.

  • Преобразование словаря в список не требует дополнительных данных — извлекаются либо ключи, либо значения, либо их пары.
  • Преобразование списка в словарь, напротив, требует дополнительных данных — список может стать либо ключами, либо значениями в новом словаре. То есть требуется задать правила, по которым элементы списка будут сопоставляться с ключами и значениями словаря. 

Поэтому есть несколько способов преобразования списка в словарь:

Инструмент

Значение ключей

Синтаксис

dict.fromkeys()

общее

new_dict = dict.fromkeys(old_list)

генератор словаря

общее

new_dict = {new_key : 'any value' for new_key in old_list}

генератор словаря + zip()

уникальное

new_dict = {new_key : old_element for new_key, old_element in zip(old_list1, old_list2)}

генератор словаря + zip() + if

уникальное

new_dict = {new_key : old_element for new_key, old_element in zip(old_list1, old_list2) if ...}

генератор словаря + zip() + if-else

уникальное

new_dict = {new_key : … If ... else ... for new_key, old_element in zip(old_list1, old_list2)}

Данные, хранящиеся в нестандартных списках, требуют более сложной записи конфигурации генераторов словарей. Часть из таких записей была показана в этом руководстве, в том числе и вспомогательные функции для итераций, таких как zip() и range().

Преобразование словаря в список тоже возможно несколькими способами, но гораздо проще:

Инструмент

Извлекает

Синтаксис

list.keys()

ключи

list(old_dict.keys())

list.values()

значения

list(old_dict.values())

list.items()

пары «ключ — значение»

list(old_dict.items())

Разворачивайте свои Python-проекты
в Timeweb Cloud

Cloud MSK 15

477 ₽/мес

Процессор
1 x 3.3 ГГц
Память
1 ГБ
NVMe
15 ГБ
Канал
1 Гбит/с
Публичный IP
Cloud MSK 30

657 ₽/мес

Процессор
1 x 3.3 ГГц
Память
2 ГБ
NVMe
30 ГБ
Канал
1 Гбит/с
Публичный IP

Таким образом, язык программирования Python предоставляет довольно гибкие возможности для преобразования структурированных (составных) типов данных из одного в другого — в данном случае списка в словарь и обратно.

5678
12 минут чтения
Средний рейтинг статьи: 5
Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server