В языке программирования 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, которые по-разному хранят данные и осуществляют доступ к ним.
Словарь более информативен, чем список: он хранит данные в виде пар «ключ — значение», в то время как список содержит только значения, к которым доступ осуществляется по индексам.
- Преобразование словаря в список не требует дополнительных данных — извлекаются либо ключи, либо значения, либо их пары.
- Преобразование списка в словарь, напротив, требует дополнительных данных — список может стать либо ключами, либо значениями в новом словаре. То есть требуется задать правила, по которым элементы списка будут сопоставляться с ключами и значениями словаря.
Поэтому есть несколько способов преобразования списка в словарь:
|
Инструмент |
Значение ключей |
Синтаксис |
|
|
общее |
|
|
генератор словаря |
общее |
|
|
генератор словаря + |
уникальное |
|
|
генератор словаря + |
уникальное |
|
|
генератор словаря + |
уникальное |
|
Данные, хранящиеся в нестандартных списках, требуют более сложной записи конфигурации генераторов словарей. Часть из таких записей была показана в этом руководстве, в том числе и вспомогательные функции для итераций, таких как zip() и range().
Преобразование словаря в список тоже возможно несколькими способами, но гораздо проще:
|
Инструмент |
Извлекает |
Синтаксис |
|
|
ключи |
|
|
|
значения |
|
|
|
пары «ключ — значение» |
|
Разворачивайте свои Python-проекты
в Timeweb Cloud
477 ₽/мес
657 ₽/мес
Таким образом, язык программирования Python предоставляет довольно гибкие возможности для преобразования структурированных (составных) типов данных из одного в другого — в данном случае списка в словарь и обратно.
