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

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

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

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

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

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

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

Содердание

Добавления словаря в список

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

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

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

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

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

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

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

  2. Добавьте к словарю его копию, используя метод copy()

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

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

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

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

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

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

# Вывод:
# ['bemind.gitbook.io', '.io', {'Nik': 33}]

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

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

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

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

values.append(ages)

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

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

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

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

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

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

  4. Мы модифицируем одно из значений в словаре прямым присвоением

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

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

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

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

Заключение

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

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

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

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

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

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

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

Last updated