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

    Команда Simple-Server
    03.06.2026
    12 мин

    Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.

    Кратко о задаче

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

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

    my_list = [false, true, 2, 'три', 4, 5]

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

    [false, true, 2, 'три', 4, 5]

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

    print(my_list[0]) # вывод: false print(my_list[1]) # вывод: true print(my_list[2]) # вывод: 2 print(my_list[3]) # вывод: три print(my_list[4]) # вывод: 4 print(my_list[5]) # вывод: 5

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

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

    my_dict = { 'Виктор': '8 900 800 70 60', 'Александра': '8 750 640 53 42', 'Екатерина': '8 680 570 46 35' }

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

    {'Виктор': '8 900 800 70 60', 'Александра': '8 750 640 53 42', 'Екатерина': '8 680 570 46 35'}

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

    print(my_list['Виктор']) # вывод: 8 900 800 70 60 print(my_list['Александра']) # вывод: 8 750 640 53 42 print(my_list['Екатерина']) # вывод: 8 680 570 46 35

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

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

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

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

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

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

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

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

    objects = ['человек', 'кот', 'инопланетянин', 'автомобиль'] # список объектов objects_states = dict.fromkeys(objects, 'злой') # создаем словарь из списка и назначаем значение для всех ключей по умолчанию objects_states_empty = dict.fromkeys(objects) # создаем словарь из списка без указания значений по умолчанию print(objects_states) # выводим в консоль созданный словарь со значениями print(objects_states_empty) # выводим в консоль созданный словарь без значений

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

    {'человек': 'злой', 'кот': 'злой', 'инопланетянин': 'злой', 'автомобиль': 'злой'} {'человек': None, 'кот': None, 'инопланетянин': None, 'автомобиль': None}

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

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

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

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

    objects = ['человек', 'кот', 'инопланетянин', 'автомобиль'] objects_states = {obj : 'злой' for obj in objects} # генератор словаря со строкой в качестве значения по умолчанию objects_states_empty = {obj : None for obj in objects} # генератор словаря с пустым значением по умолчанию print(objects_states) print(objects_states_empty)

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

    {'человек': 'злой', 'кот': 'злой', 'инопланетянин': 'злой', 'автомобиль': 'злой'} {'человек': None, 'кот': None, 'инопланетянин': None, 'автомобиль': None}

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

    print(type(None)) # вывод: <class 'NoneType'>

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

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

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

    objects = ['человек', 'кот', 'инопланетянин', 'автомобиль'] states = ['идет', 'мурчит', 'маскируется', 'едет'] for q, w in zip(objects, states): print(q, w)

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

    человек идет кот мурчит инопланетянин маскируется автомобиль едет

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

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

    objects = ['человек', 'кот', 'инопланетянин', 'автомобиль'] # список будущих ключей для нового словаря states = ['идет', 'мурчит', 'маскируется', 'едет'] # список будущих значений для всех ключей нового словаря objects_states = {obj : state for obj, state in zip(objects, states)} # генератор словаря с перебором списков ключей и значений print(objects_states)

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

    {'человек': 'идет', 'кот': 'мурчит', 'инопланетянин': 'маскируется', 'автомобиль': 'едет'}

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

    objects = ['человек', 'кот', 'инопланетянин', 'автомобиль'] states = ['идет', 'мурчит'] objects_states = {obj : state for obj, state in zip(objects, states)} print(objects_states) {'человек': 'идет', 'кот': 'мурчит'}

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

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

    objects = ['человек', 'кот', 'инопланетянин', 'автомобиль'] states = ['идет', 'мурчит', 'маскируется', 'едет'] objects_states = dict(zip(objects, states)) # создаем словарь из двух списков без цикла for print(objects_states)

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

    {'человек': 'идет', 'кот': 'мурчит', 'инопланетянин': 'маскируется', 'автомобиль': 'едет'}

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

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

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

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

    objects = ['человек', 'кот', 'инопланетянин', 'автомобиль'] states = ['идет', 'мурчит', 'маскируется', 'едет'] objects_states = {obj : state for obj, state in zip(objects, states) if obj != 'инопланетянин'} # защищаем Землю от воздействия неизвестной внеземной цивилизации print(objects_states)

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

    {'человек': 'идет', 'кот': 'мурчит', 'автомобиль': 'едет'}

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

    objects = ['человек', 'кот', 'инопланетянин', 'автомобиль'] states = ['идет', 'мурчит', 'маскируется', 'едет'] objects_states = {obj : state for obj, state in zip(objects, states) if obj != 'инопланетянин' if obj != 'кот'} # убираем незамаскированное внеземное существо и кота — он может оказаться замаскированным гостем из другой галактики print(objects_states)

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

    {'человек': 'идет', 'автомобиль': 'едет'}

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

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

    objects = ['человек', 'кот', 'инопланетянин', 'автомобиль'] states = ['идет', 'мурчит', 'маскируется', 'едет'] # в этом примере все строковые элементы первого списка длиннее, чем строковые элементы второго списка, кроме одного — 'кот' objects_states = {obj : ('[ПОДОЗРИТЕЛЕН]' if len(obj) < len(state) else 'спокойно ' + state) for obj, state in zip(objects, states)} # находим подозрительного кота и помечаем его соответствующей биркой, а другие значения немного дополняем print(objects_states)

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

    {'человек': 'спокойно идет', 'кот': '[ПОДОЗРИТЕЛЕН]', 'инопланетянин': 'спокойно маскируется', 'автомобиль': 'спокойно едет'}

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

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

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

    objects_and_states = ['человек', 'идет', 'кот', 'мурчит', 'инопланетянин', 'маскируется', 'автомобиль', 'едет'] # ключи и значения последовательно записаны в один список objects_states = {objects_and_states[i] : objects_and_states[i+1] for i in range(0, len(objects_and_states), 2)} # в этом варианте генератора функция range настраивает длину и шаг итерирования: range(НАЧАЛО, КОНЕЦ, ШАГ) print(objects_states)

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

    {'человек': 'идет', 'кот': 'мурчит', 'инопланетянин': 'маскируется', 'автомобиль': 'едет'}

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

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

    objects = [ {'имя': 'человек', 'состояние': 'идет', 'местонахождение': 'улица'}, {'имя': 'кот', 'состояние': 'мурчит', 'местонахождение': 'подоконник'}, {'имя': 'инопланетянин', 'состояние': 'маскируется', 'местонахождение': 'звездолет'}, {'имя': 'автомобиль', 'состояние': 'едет', 'местонахождение': 'шоссе'} ] objects_states = {obj['имя'] : obj['состояние'] for obj in objects} print(objects_states)

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

    {'человек': 'идет', 'кот': 'мурчит', 'инопланетянин': 'маскируется', 'автомобиль': 'едет'}

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

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

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

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

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

    objects_states = { 'человек': 'идет', 'кот': 'мурчит', 'инопланетянин': 'маскируется', 'автомобиль': 'едет' } # все возвращаемые объекты в явном виде конвертируются в списки с помощью функции list() objects_keys = list(objects_states.keys()) # список с ключами словаря objects_values = list(objects_states.values()) # список со значениями словаря objects_items = list(objects_states.items()) # список с парами «ключ-значение» словаря print(objects_keys) print(objects_values) print(objects_items)

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

    ['человек', 'кот', 'инопланетянин', 'автомобиль'] ['идет', 'мурчит', 'маскируется', 'едет'] [('человек', 'идет'), ('кот', 'мурчит'), ('инопланетянин', 'маскируется'), ('автомобиль', 'едет')]

    Список и словарь — это структуры данных в языке программирования 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()

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

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

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

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

    ИнструментИзвлекаетСинтаксис
    list.keys()ключиlist(old_dict.keys())
    list.values()значенияlist(old_dict.values())
    list.items()пары «ключ — значение»list(old_dict.items())

    Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.

    VPS для проекта

    VPS с root-доступом, NVMe и поддержкой 24/7 на Simple-Server.

    StarterVDS

    490₽

    в месяц

    1 ядро

    1 ГБ RAM

    20 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Безлимитный трафик
    Заказать VPS
    Рекомендуем

    PerformanceVDS

    1190₽

    в месяц

    2 ядра

    4 ГБ RAM

    60 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Базовая DDoS-защита
    Заказать VPS

    Нужна другая конфигурация или чистый VPS без панели?

    Все тарифы VPS

    Похожие статьи, которые могут быть вам интересны