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

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

Списки и словари являются двумя из самых часто используемых структур данных в Python. Список — это упорядоченная коллекция объектов, в то время как словарь — это неупорядоченная коллекция объектов, где каждый объект представлен в виде пары «ключ-значение».

Иногда возникает необходимость преобразовать список в словарь. Давайте рассмотрим несколько примеров.

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

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

# Заданный список
list_1 = ['a', 'b', 'c', 'd', 'e']

# Преобразование списка в словарь
dict_1 = {i: list_1[i] for i in range(len(list_1))}

print(dict_1)  

#{0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e'}

Здесь мы использовали генератор словарей (dictionary comprehension), который похож на генератор списков, но создает словарь вместо списка. Ключами словаря являются индексы элементов списка, а значениями — сами элементы списка.

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

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

# Заданный список списков
list_2 = [['a', 1], ['b', 2], ['c', 3]]

# Преобразование списка в словарь
dict_2 = {item[0]: item[1] for item in list_2}

print(dict_2)  

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

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

Аналогично можно преобразовать список кортежей в словарь.

# Заданный список кортежей
list_3 = [('a', 1), ('b', 2), ('c', 3)]

# Преобразование списка в словарь
dict_3 = dict(list_3)

print(dict_3)  

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

Преобразование списка в словарь с использованием функции zip()

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

# Заданные списки
keys = ['a', 'b', 'c']
values = [1, 2, 3]

# Преобразование списков в словарь
dict_4 = dict(zip(keys, values))

print(dict_4)  

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

Преобразование списка в словарь с использованием функции enumerate()

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

# Заданный список
list_4 = ['a', 'b', 'c', 'd', 'e']

# Преобразование списка в словарь
dict_5 = dict(enumerate(list_4))

print(dict_5)  

#{0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e'}

Преобразование списка в словарь с использованием функции setdefault()

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

# Заданный список
list_5 = ['a', 'b', 'c', 'a', 'b', 'b', 'c', 'a']

# Преобразование списка в словарь
dict_6 = {}
for item in list_5:
    dict_6.setdefault(item, list_5.count(item))

print(dict_6)  

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

Преобразование сложных списков в словари

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

# Заданный список словарей
list_of_dicts = [{'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bob'}, {'id': 3, 'name': 'Charlie'}]

# Преобразование списка словарей в словарь словарей
dict_of_dicts = {d['id']: d for d in list_of_dicts}

print(dict_of_dicts)  

#{1: {'id': 1, 'name': 'Alice'}, 2: {'id': 2, 'name': 'Bob'}, 3: {'id': 3, 'name': 'Charlie'}}

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

Преобразование списка в словарь с использованием встроенной функции dict()

В Python есть встроенная функция dict(), которая может быть использована для преобразования списка в словарь.

# Заданный список
list_6 = [('a', 1), ('b', 2), ('c', 3)]

# Преобразование списка в словарь
dict_7 = dict(list_6)

print(dict_7)  

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

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

Преобразование списка в словарь с использованием функции defaultdict() из модуля collections

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

from collections import defaultdict

# Заданный список
list_7 = ['a', 'b', 'c', 'a', 'b', 'b', 'c', 'a']

# Преобразование списка в словарь
dict_8 = defaultdict(int)
for item in list_7:
    dict_8[item] += 1

print(dict_8)  

#defaultdict(<class 'int'>, {'a': 3, 'b': 3, 'c': 2})

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

Использование метода fromkeys() для создания словаря

Метод fromkeys() позволяет создать новый словарь с ключами из переданного списка. Значения всех ключей в новом словаре будут равны значению, переданному в качестве второго аргумента (по умолчанию None).

# Заданный список
list_8 = ['a', 'b', 'c', 'd', 'e']

# Преобразование списка в словарь
dict_9 = dict.fromkeys(list_8, 0)

print(dict_9)  

#{'a': 0, 'b': 0, 'c': 0, 'd': 0, 'e': 0}

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

Заключение

В этой статье мы рассмотрели различные способы преобразования списка в словарь в Python, включая использование генераторов словарей, функций zip() и enumerate(), методов setdefault() и fromkeys(), функции defaultdict() из модуля collections и встроенной функции dict().

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

Содержание: