Гид по технологиям

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

4 min read Python Обновлено 02 Jan 2026
Преобразовать словарь в список в Python
Преобразовать словарь в список в Python

Фрагмент кода Python на фоне смартфона

Data manipulation happens a lot in programming, depending on the problem you intend to solve. You may often find yourself converting one data structure to another. Some types are so similar that converting between them is a straightforward process.

In Python, turning a dictionary into a nested or flattened list is one popular conversion you’ll find yourself carrying out.

Основные понятия

  • dict — отображение ключ → значение (ключи уникальны). Ключи обычно immutable (строки, числа, кортежи).
  • list — упорядоченная изменяемая последовательность элементов.
  • nested list — список из вложенных списков/кортежей, где каждый элемент может быть парой [ключ, значение].

Преобразование словаря в список с помощью for‑цикла

for‑цикл даёт явный контроль над порядком и формой результата. Ниже пример, который создаёт вложенный список (список списков):

myDictionary = {"A": "Python", "B": "JavaScript", "C": "Node"}  
convertedList = []  
  
for i in myDictionary:  
    convertedList.append([i, myDictionary[i]])  
  
print(convertedList)  
  
# Output: [['A', 'Python'], ['B', 'JavaScript'], ['C', 'Node']]  

Это эквивалентно более явному варианту с items():

for key, value in myDictionary.items():  
    convertedList.append([key, value])  

Вы можете заменить [] на () или {} чтобы получить кортежи или множества соответственно.

Также часто используют list comprehension для компактности:

convertedList = [[i, myDictionary[i]] for i in myDictionary]

Функция для создания плоского списка

Если нужен не вложенный список, а последовательность ключей и значений подряд (flat):

def convertToStraightList(sampleDict):
    flatList = []

    for key, value in sampleDict.items():
        flatList.extend([key, value])

    return flatList

print(convertToStraightList(myDictionary))

# Output: ['A', 'Python', 'B', 'JavaScript', 'C', 'Node']

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

Однострочные стандартные приёмы: zip и map

zip и map позволяют получить результат в одну строку. Их поведение различается.

convertedList = list(zip(myDictionary.keys(), myDictionary.values()))
print(convertedList)

# Output: [('A', 'Python'), ('B', 'JavaScript'), ('C', 'Node')]

zip возвращает список кортежей (ключ, значение). map с items() даст список списков:

convertedList = list(map(list, myDictionary.items()))
print(convertedList)

# Output: [['A', 'Python'], ['B', 'JavaScript'], ['C', 'Node']]

Альтернативы для плоского списка и производительность

  • itertools.chain.from_iterable: быстрый способ «расплющить» итератор пар.
import itertools
flat = list(itertools.chain.from_iterable(myDictionary.items()))
  • sum([…], []) — короткий приём, но он медленнее и создаёт много временных списков, поэтому его не рекомендуют для больших словарей.

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

Обратное преобразование: список → словарь

Частая задача — преобразовать список пар обратно в dict. Варианты:

  • Если есть список кортежей/списков вида [(k, v), …] или [[k, v], …]:
l = [['A', 'Python'], ['B', 'JavaScript'], ['C', 'Node']]
d = dict(l)
print(d)  # {'A': 'Python', 'B': 'JavaScript', 'C': 'Node'}
  • Если есть два списка — ключи и значения — используйте zip:
keys = ['A', 'B', 'C']
values = ['Python', 'JavaScript', 'Node']
d = dict(zip(keys, values))

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

Когда методы не сработают (контрпримеры)

  • Если ключи неуникальны, dict не сможет хранить все пары: информация потеряется.
  • Если значения — сложные структуры, простое «расплющивание» может сделать восстановление исходного словаря затруднительным.
  • Если нужен стабильный порядок между версиями Python < 3.7, полагаться на порядок итерации нельзя.

Мини‑методология выбора подхода

  1. Нужен ли вложенный список (пар) или плоский? Выберите соответственно.
  2. Требуется ли сохранение порядка? Для Python 3.7+ dict сохраняет порядок вставки.
  3. Размер данных: для больших структур используйте itertools/generator.
  4. Нужна ли обратимость? Если да — храните пары как кортежи [(k, v), …].

Ментальные модели и рекомендации

  • «Пара — это атом»: если вы хотите восстановить словарь без потерь, храните пары как отдельные элементы ([k, v] или (k, v)).
  • «Плоский» формат удобен для CSV/экспорта, но он не хранит структуру однозначно.
  • Используйте map/zip для компактного выражения, for‑цикл для явного контроля и отладки.

Пример с itertools для больших данных

import itertools
# items() отдаёт пары (k, v)
flat = list(itertools.chain.from_iterable(myDictionary.items()))
print(flat)
# ['A', 'Python', 'B', 'JavaScript', 'C', 'Node']

Критерии приёмки

  • Результат соответствует требуемому формату (вложенный или плоский).
  • Для обратного преобразования структура должна позволять однозначно восстановить пары.
  • Производительность и использование памяти находятся в пределах допустимых для задачи.

Быстрая шпаргалка (cheat sheet)

  • Вложенный список (список списков): [[k, v] for k, v in d.items()] или list(map(list, d.items()))
  • Вложенный список кортежей: list(d.items()) или list(zip(d.keys(), d.values()))
  • Плоский список: list(itertools.chain.from_iterable(d.items())) или вручную extend в цикле
  • Список → dict: dict(list_of_pairs) или dict(zip(keys, values))

Примечания и безопасность

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

Частые вопросы

Как получить именно плоский список? Используйте extend в цикле или itertools.chain.from_iterable для эффективности.

Как восстановить словарь из списка пар? Если пары сохранены как кортежи/списки длины 2, можно вызвать dict(pairs).


Сводка

  • Есть несколько способов преобразовать dict → list: for, comprehension, map, zip, itertools.
  • Выбирайте метод по удобству, читаемости и требованиям по памяти.
  • Для обратного пути используйте dict() и zip(), но следите за уникальностью ключей.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Переключить 24‑часовой формат на Android и iPhone
Инструкции

Переключить 24‑часовой формат на Android и iPhone

Быстрый обмен текстом онлайн
Инструменты

Быстрый обмен текстом онлайн

Скрыть или убрать Articles for You в Chrome (Android)
Браузеры

Скрыть или убрать Articles for You в Chrome (Android)

Отслеживание целей в Google Календаре
Productivity

Отслеживание целей в Google Календаре

Ошибка «Requested resource is in use» — исправление в Windows
Windows

Ошибка «Requested resource is in use» — исправление в Windows

Как изменить значок Reddit на iPhone и Android
Руководство

Как изменить значок Reddit на iPhone и Android