Преобразование словаря Python в список

TL;DR
Ключи и значения словаря легко превратить в вложенный или «плоский» список в Python: используйте обычный for, list comprehension, map/zip или itertools. Выбор метода зависит от желаемой структуры (кортежи, списки, плоская последовательность) и от особенностей данных (вложенные структуры, порядок, неизменяемость).
Зачем это нужно
Преобразование словаря в список полезно при сериализации, передаче данных в API, подготовке к обработке в циклах, сравнении пар ключ–значение или при создании таблиц/CSV. Словарь в Python представляет собой набор пар “ключ: значение” — это удобная структура для поиска по ключам, но многие алгоритмы и форматы ожидают именно списки.
Важно: начиная с Python 3.7 словари сохраняют порядок вставки, поэтому результат преобразования будет детерминирован при одинаковой вставке элементов.
Преобразование с помощью цикла for
Один из самых явных и читаемых подходов — пройтись по словарю в цикле и собирать пары.
myDictionary = {"A": "Python", "B": "JavaScript", "C": "Node"}
convertedList = []
for key in myDictionary:
convertedList.append([key, myDictionary[key]])
print(convertedList)
# Вывод: [['A', 'Python'], ['B', 'JavaScript'], ['C', 'Node']]То же самое можно записать с распаковкой items():
convertedList = []
for key, value in myDictionary.items():
convertedList.append([key, value])Или компактно через list comprehension:
convertedList = [[k, v] for k, v in myDictionary.items()]Если вам нужны кортежи вместо списков, замените [] на (). Для множеств используйте { }, но помните: элементы множества должны быть хэшируемыми, и множества не сохраняют порядок.
Функция: получить «плоский» список
Если нужно не [[k, v], …], а [k, v, k2, v2, …], используйте extend() внутри цикла:
def convert_to_flat_list(dct):
flat = []
for key, value in dct.items():
flat.extend([key, value])
return flat
print(convert_to_flat_list(myDictionary))
# Вывод: ['A', 'Python', 'B', 'JavaScript', 'C', 'Node']Альтернативно, можно использовать list comprehension с itertools:
import itertools
flat = list(itertools.chain.from_iterable([[k, v] for k, v in myDictionary.items()]))Однострочные встроенные функции: zip и map
zip и map дают удобные варианты:
- zip создаёт вложенный список кортежей (ключ, значение):
converted = list(zip(myDictionary.keys(), myDictionary.values()))
# [('A', 'Python'), ('B', 'JavaScript'), ('C', 'Node')]- map с приведением к list выдаёт список списков:
converted = list(map(list, myDictionary.items()))
# [['A', 'Python'], ['B', 'JavaScript'], ['C', 'Node']]Выбирайте zip, если важен порядок соответствия ключей и значений и вы хотите кортежи; map часто короче и выразительнее, если вам нужны списки пар.
Когда подход не подходит / примеры ошибок
- Если значения нередко вложенные структуры (списки, словари), простое flatten может потерять смысл: как интерпретировать вложенные словари как последовательность?
- Преобразование в set не работает, если значения не хэшируемы (например, списки) — будет TypeError.
- Равнозначность пар при последующем восстановлении словаря: плоский список [k, v, k2, v2] вернёт словарь только при условии уникальности ключей и чётного числа элементов.
Альтернативные подходы и полезные приёмы
- itertools.chain.from_iterable для плоского списка (см. выше).
- sum([[k, v] for k, v in d.items()], []) — короткий трюк, но неэффективен для больших словарей (создаёт много временных списков).
- collections.OrderedDict для явного контроля порядка в старых версиях Python (до 3.7).
- Pandas: если цель — таблица/CSV, используйте pandas.DataFrame.from_dict(d, orient=’index’/‘columns’).
Модель мышления (интуиция)
Думайте о словаре как о наборе пар (key ↔ value). Преобразование в список — это упаковка этих пар в последовательность. Есть два базовых формата:
- вложенный: каждая пара — отдельный контейнер ([[k,v], [k2,v2], …]); удобен для итерации по парам;
- плоский: все элементы подряд ([k, v, k2, v2, …]); удобен для вывода или простого CSV-представления.
Сравнение подходов
| Метод | Результат | Порядок | Примечания |
|---|---|---|---|
| for + append | [[k,v], …] | сохраняется | явный, легко читать |
| list comprehension | [[k,v], …] | сохраняется | компактно |
| zip(keys, values) | [(k,v), …] | сохраняется | кортежи, быстрее при простоте |
| map(list, items) | [[k,v], …] | сохраняется | функциональный стиль |
| itertools.chain | [k,v,k2,v2,…] | сохраняется | удобно для плоской последовательности |
Контроль качества: чек-лист для разработчика
- Проверить, что ключи хэшируемы (если будете помещать в set).
- Решить формат: вложенный список или плоский.
- Убедиться, что порядок важен и использовать Python 3.7+ или OrderedDict.
- Обработать вложенные структуры отдельно (рекурсивная сериализация).
- Написать тесты: пустой словарь, одиночная пара, ключи/значения разного типа.
Краткий глоссарий
- key: одно из уникальных полей в словаре, по которому ищут значение.
- value: данные, связанные с ключом.
- items(): метод словаря, возвращает пары (key, value).
- flatten: преобразование вложенной структуры в плоскую последовательность.
Примеры тестовых случаев
- {} -> [] или [] в зависимости от формата.
- {“a”: 1} -> [[“a”,1]] и [“a”, 1] для плоского.
- Словарь с неупорядоченной вставкой (в старых версиях Python) — ожидайте непредсказуемого порядка.
Итог
Преобразование словаря в список в Python — тривиальная задача с множеством вариантов. Выбирайте метод в зависимости от требуемой структуры, эффективности и ограничений данных. Для большинства задач хватает list(dict.items()), list(map(list,…)) или простой list comprehension.
Краткие рекомендации: используйте list(dict.items()) для пары в кортеже, map(list, …) или comprehension для списка пар, itertools.chain для плоской последовательности.
Похожие материалы
Как узнать IP-адрес в Windows 10
Видеозадний фон в Microsoft Edge — включение и отключение
Исправление ошибки 0x800070002c-0x3000d в Windows 10
Cider — клиент Apple Music для Linux
Как использовать FC в командной строке Windows