Полное руководство по созданию словаря на основе списка в Python

Раздел: Python -> Преобразование данных

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

Как наиболее эффективно преобразовать два списка (ключи и значения) в словарь?

Самый простой и быстрый способ для создания словаря из двух списков одинаковой длины – использование встроенной функции zip() в сочетании с dict():


keys = ["a", "b", "c"]
values = [1, 2, 3]
result = dict(zip(keys, values))
print(result)

List в словарь python (преобразование списка в словарь в python)

{'a': 1, 'b': 2, 'c': 3}

преобразование в текст python (преобразование в строку в python)

Функция zip объединяет элементы из переданных итераторов в кортежи, а dict преобразует последовательность кортежей в словарь. Этот подход работает за линейное время и удобен для чтения.

Типичные ошибки:

  • Разная длина списков. Если списки разной длины, zip обрезает до самой короткой. Элементы из более длинного списка игнорируются без предупреждения.
  • Неуникальные ключи. Если в списке ключей есть дубликаты, последнее значение перезапишет предыдущее.
  • Типы ключей. Ключи должны быть неизменяемыми (hashable). Если попытаться использовать список в качестве ключа, возникнет ошибка TypeError.

Как создать словарь из одного списка, где каждый элемент – ключ, а значения – одинаковы?

Метод dict.fromkeys() создает словарь с ключами из переданного списка и заданным значением по умолчанию (по умолчанию None).


keys = ["x", "y", "z"]
result = dict.fromkeys(keys, 0)
print(result)

преобразование данных python (преобразование данных в python)

{'x': 0, 'y': 0, 'z': 0}

Python функции преобразования (функции преобразования в python)

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

Как превратить список в словарь, где ключи – элементы списка, а значения – их индексы?

Применяется встроенная функция enumerate(), которая возвращает пару (индекс, элемент). Затем можно применить dict() или генератор словаря.


items = ["apple", "banana", "cherry"]
result = {item: idx for idx, item in enumerate(items)}
print(result)
{'apple': 0, 'banana': 1, 'cherry': 2}

Если нужны ключи – индексы, а значения – элементы, просто меняется порядок: {idx: item for idx, item in enumerate(items)}.

Особенности: Индексы начинаются с 0. Для старта с другого числа передается второй аргумент enumerate(items, start=1).

Как преобразовать список кортежей (пар) в словарь?

Самый прямой способ – передать список кортежей в dict():


pairs = [("one", 1), ("two", 2), ("three", 3)]
result = dict(pairs)
print(result)
{'one': 1, 'two': 2, 'three': 3}

Условие: Каждый кортеж должен содержать ровно два элемента. Если кортеж длиннее двух, возникнет ошибка ValueError.

Как создать словарь с помощью цикла for и метода setdefault?

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


words = ["apple", "banana", "avocado", "blueberry"]
result = {}
for word in words:
    key = word[0]
    result.setdefault(key, []).append(word)
print(result)
{'a': ['apple', 'avocado'], 'b': ['banana', 'blueberry']}

setdefault возвращает значение по ключу, если ключ существует, иначе создает его с переданным значением по умолчанию (в примере – пустой список) и возвращает его.

Альтернатива: collections.defaultdict делает то же самое более элегантно, избегая лишних проверок.

Как использовать генератор словаря (dict comprehension) для преобразования списка с условием?

Генератор словаря позволяет фильтровать или изменять значения на лету.


numbers = [1, 2, 3, 4, 5]
result = {n: n**2 for n in numbers if n % 2 == 0}
print(result)
{2: 4, 4: 16}

Здесь словарь включает только четные числа, каждому сопоставлен его квадрат.

Расширенные примеры преобразования списка в словарь

В этом разделе приведены более сложные и неочевидные сценарии использования преобразования списка в словарь.

Пример 1: Слияние двух списков разной длины с заполнением по умолчанию

Используется itertools.zip_longest для создания пар, когда списки разной длины.

Пример

from itertools import zip_longest

keys = ['a', 'b', 'c', 'd']
values = [1, 2, 3]
result = dict(zip_longest(keys, values, fillvalue=None))
print(result)
{'a': 1, 'b': 2, 'c': 3, 'd': None}

Этот метод полезен при подготовке данных с пропусками.

Пример 2: Создание словаря со списками значений из списка с дублирующимися ключами

Если исходный список содержит пары с повторяющимися ключами и нужно сохранить все значения, применяется группировка через defaultdict.

Пример

from collections import defaultdict

data = [('a', 1), ('b', 2), ('a', 3), ('c', 4), ('b', 5)]
result = defaultdict(list)
for key, value in data:
    result[key].append(value)
print(dict(result))
{'a': [1, 3], 'b': [2, 5], 'c': [4]}

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

Пусть есть класс Person с атрибутами name и age. Создается словарь, где ключ – имя, значение – объект.

Пример

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def __repr__(self):
        return f"{self.name}: {self.age}"

people = [Person('Alice', 30), Person('Bob', 25), Person('Charlie', 35)]
name_to_person = {p.name: p for p in people}
print(name_to_person)
{'Alice': Alice: 30, 'Bob': Bob: 25, 'Charlie': Charlie: 35}

Пример 4: Использование map и lambda для преобразования списка в словарь

Комбинация map и dict позволяет создавать пары на основе функции.

Пример

keys = ['x', 'y', 'z']
result = dict(map(lambda k: (k, k.upper()), keys))
print(result)
{'x': 'X', 'y': 'Y', 'z': 'Z'}

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

Из списка списков извлекаются пары ключ-значение.

Пример

matrix = [[1, 'a'], [2, 'b'], [3, 'c']]
result = {row[0]: row[1] for row in matrix}
print(result)
{1: 'a', 2: 'b', 3: 'c'}

Пример 6: Обработка ошибок при преобразовании некорректных данных

Если элементы списка не являются парами, можно использовать try-except для фильтрации.

Пример

data = [(1, 'a'), (2, 'b'), ('c',), (3, 'd')]
result = {}
for item in data:
    try:
        key, value = item
        result[key] = value
    except ValueError:
        print(f"Пропускаем элемент не парной длины: {item}")
print(result)
Пропускаем элемент не парной длины: ('c',)
{1: 'a', 2: 'b', 3: 'd'}

Пример 7: Создание словаря с ключами из списка и значениями, вычисленными с помощью другой функции

Например, вычисление длины строк.

Пример

words = ['cat', 'elephant', 'dog']
result = {w: len(w) for w in words}
print(result)
{'cat': 3, 'elephant': 8, 'dog': 3}

Преобразование списка в словарь в Python - comments

En
List в словарь python (python)