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

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

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

К концу чтения этого руководства вы узнаете следующее:

  • Как добавить словарь в список в Python

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

  • Что произойдет, если вы не добавите копию словаря

Оглавление

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

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

Давайте сначала рассмотрим метод .append() перед тем, как глубже погрузиться в добавление словарей:

# Понимание метода list.append() в Python
list.append(x)

Метод list.append() принимает объект для добавления в конец заданного списка. Поскольку метод работает на месте, нет необходимости переназначать список другой переменной. Как следует из названия, метод .append() добавит элемент в конец данного списка.

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

  1. Объявите ваш список и словарь

    В этом случае мы будем использовать две переменные для создания нашего списка и словаря. Наш список будет называться values, а наш словарь

  2. Добавьте к списку копию словаря

    Метод list.append() в Python работает непосредственно с объектом, поэтому его не нужно переназначать. Вместо того, чтобы передавать сам словарь, используйте метод .copy() для копирования.

  3. Python будет добавлять словарь, используя его значения, а не ссылку

    Используя метод .copy(), мы добавляем значения словаря, а не их точки ссылки. Без этого словарь в списке будет связан с оригиналом.

Давайте рассмотрим пример, чтобы увидеть, как это работает:

# Добавление словаря в список в Python
values = ['bemind.gitbook.io', '.io']
ages = {'Ник': 33}

values.append(ages.copy())
print(values)

# Возвращает:
# ['bemind.gitbook.io', '.io', {'Ник': 33}]

В приведенном выше блоке кода мы передали копию словаря ages методу .append(). Это, во многих отношениях, разъединяет значения от ссылки и добавляет только детали словаря.

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

Если вы читали до этого момента, возможно, вас интересует, зачем нам нужно было использовать метод .copy() при добавлении нашего словаря. Давайте посмотрим на пример того, что происходит, когда мы этого не делаем:

# Добавление словаря без копирования
values = ['bemind.gitbook.io', '.io']
ages = {'Ник': 33}

values.append(ages)

print('Список до изменения: ', values)
ages['Ник'] = 34
print('Список после изменения: ', values)

# Возвращает:
# Список до изменения:  ['bemind.gitbook.io', '.io', {'Ник': 33}]
# Список после изменения:  ['bemind.gitbook.io', '.io', {'Ник': 34}]

Давайте разберем, что мы делаем в приведенном выше блоке кода:

  1. Мы объявляем наш словарь и список, как ранее

  2. Затем мы добавляем словарь в список без его копирования

  3. Затем мы выводим список

  4. Мы изменяем одно из значений в словаре с помощью прямого присваивания.

  5. Затем мы снова печатаем значения

При добавлении копии нарушается ссылка! Это гарантирует, что при обновлении одного из словарей другой не обновляется. Фактически, после этого два словаря больше не разделяют одно и то же место в памяти, что делает операцию гораздо безопаснее! Вот почему нам нужно было создать копию словаря перед его добавлением. Когда мы просто добавляем словарь сам по себе, он добавляет ссылку на объект в список. Иначе говоря, словарь сам по себе является лишь ссылкой. Это означает, что он разделяет одно и то же место в памяти, и если один обновляется, обновляется и другой.

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

Заключение

В этом учебнике вы научились добавлять словарь в список в Python. Хотя это может показаться простой задачей, она имеет некоторую сложность из-за того, как Python пытается экономить память. Вы научились использовать метод .append() и метод .copy() для того, чтобы добавлять значения словаря в список, а не ссылку на сам словарь. Это гарантировало, что значения словаря были добавлены, а не ссылка на словарь. Далее вы узнали, почему этот процесс необходим, на примере того, что происходит, если сначала не скопировать словарь.

Дополнительные ресурсы

Чтобы узнать больше о связанных темах, ознакомьтесь с нижеперечисленными уроками:

  • Добавить к списку Python (добавить в начале)

  • Как исправить: Python AttributeError: объект «dict» не имеет атрибута «append».

  • Python: добавление к кортежу (3 простых способа)

Last updated