Слияние Словарей в Python – Комбинирование Словарей (7 Способов)

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

Словари Python — это невероятно важные структуры данных. Они часто используются для быстрого извлечения данных. Словари Python имеют много общих атрибутов с форматом JSON, который часто используется для хранения веб-данных. При запросе веб-API вы, вероятно, столкнетесь с данными в формате JSON. Из-за важности извлечения веб-данных умение объединять словари в Python — это важный навык, который нужно понять.

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

Оглавление

Объединение словарей в Python 3.9+

Python представил новый способ объединения словарей в Python 3.9 с использованием оператора объединения |. Объединение двух словарей с помощью оператора объединения, вероятно, является самым быстрым и чистым способом объединения двух словарей.

Давайте посмотрим, как это выглядит в Python:

# Объединение двух словарей Python с использованием оператора объединения в Python 3.9+
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}

dict3 = dict1 | dict2

print(dict3)

# Возвращает: {'a': 1, 'b': 2, 'c': 3, 'd': 4}

Мы видим, что два словаря были успешно объединены.

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

Давайте посмотрим, как это выглядит:

# Объединение двух словарей Python с использованием оператора объединения в Python 3.9+
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}

dict1 |= dict2

print(dict1)

# Возвращает: {'a': 1, 'b': 2, 'c': 3, 'd': 4}

Мы видим, что это вернуло тот же результат, что и выше.

Теперь давайте рассмотрим пример того, что происходит, когда два словаря имеют общий ключ.

# Объединение двух словарей Python с использованием оператора объединения в Python 3.9+
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'a': 4}

dict3 = dict1 | dict2

print(dict3)

# Возвращает: {'a': 4, 'b': 2, 'c': 3}

Мы видим, что Python перезапишет левый словарь значением ключей правого словаря, если существует перекрытие. Имейте это в виду! Если вы предпочитаете сохранять значения первого словаря, просто измените порядок, в котором вы обновляете словари.

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

Хотите узнать, как красиво распечатать JSON-файл с помощью Python? Узнайте три разных метода для этого с помощью этого подробного руководства здесь.

Объединение словарей Python с распаковкой элементов

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

Элементы в Python можно распаковать с помощью символов * или **. Для словарей, чтобы получить доступ как к ключу, так и к значению, вам нужно использовать символы **.

Давайте посмотрим, как это можно использовать для объединения двух словарей в Python:

# Объединение двух словарей Python с использованием распаковки элементов
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}

dict3 = {**dict1, **dict2}

print(dict3)

# Возвращает: {'a': 1, 'b': 2, 'c': 3, 'd': 4}

Мы видим, что это успешно объединяет оба словаря. Если у вас было более двух словарей, вы могли бы просто продолжать добавлять их один за другим, разделяя запятыми.

Что же происходит, если ваши словари имеют общие ключи? Давайте посмотрим, что происходит:

# Объединение двух словарей Python с использованием распаковки элементов
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'a': 4}

dict3 = {**dict1, **dict2}

print(dict3)

# Возвращает: {'a': 4, 'b': 2, 'c': 3}

Мы видим, что, аналогично методу оператора объединения, описанному выше, словарь справа перезапишет значения общих ключей слева.

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

Нужно автоматизировать переименование файлов? Ознакомьтесь с этим подробным руководством по использованию pathlib для переименования файлов. Больше визуального обучения, весь урок также доступен в видео в статье!

Объединение словарей Python с методом update

Метод .update() Python используется для обновления элементов. В этом случае мы будем использовать метод для обновления словарей. По сути, он обновит любой существующий ключ новыми значениями или создаст новые пары ключ:значение для несуществующих ключей.

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

# Объединение двух словарей Python с использованием .update()
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}

dict3 = dict1.copy()
dict3.update(dict2)

print(dict3)

# Возвращает: {'a': 1, 'b': 2, 'c': 3, 'd': 4}

Мы видим, что сначала мы скопировали наш первый словарь, затем обновили словарь. Имейте в виду, что это обновление происходит на месте, что означает, что вам не нужно повторно присваивать словарь самому себе.

Теперь давайте посмотрим, что происходит, когда два словаря имеют общий ключ:

# Объединение двух словарей Python с использованием .update()
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'a': 4}

dict3 = dict1.copy()
dict3.update(dict2)

print(dict3)

# Возвращает: {'a': 4, 'b': 2, 'c': 3}

Мы видим, что, аналогично двум другим методам, показанным в учебнике, словарь справа обновит любые общие ключи словаря слева.

В следующем разделе вы увидите более глубокий анализ того, как работает объединение двух словарей Python с общими ключами.

Хотите узнать больше о Python f-строках? Ознакомьтесь с моим подробным учебником, который включает пошаговое видео для изучения Python f-строк!

Объединение словарей Python с общими ключами

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

Python всегда будет обновлять записи слева записями справа, независимо от того, какой метод объединения словарей вы используете (из трех вышеуказанных).

Интуитивно это имеет наибольший смысл при рассмотрении метода .update(). Поскольку метод .update() обновляет значения словаря слева значениями словаря справа, мы можем интуитивно лучше понять это.

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

Давайте посмотрим, как это выглядит с методом распаковки:

# Объединение трех словарей с общими ключами
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'a': 4}
dict3 = {'c': 3, 'a': 5}

dict4 = {**dict1, **dict2, **dict3}

print(dict4)

# Возвращает: {'a': 5, 'b': 2, 'c': 3}

Мы видим, что хотя ключ a общий для всех трех словарей, значение самого правого словаря сохраняется для этого ключа.

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

Нужно проверить, существует ли ключ в словаре Python? Ознакомьтесь с этим учебником, который учит пяти различным способам проверки существования ключа в словаре Python, включая возврат значения по умолчанию.

Объединение словарей Python путем добавления значений

Часто возникает необходимость хранить значения списка в значениях вашего словаря. Когда вы объединяете словари, вы можете захотеть объединить списки, а не перезаписывать их. Именно это вы узнаете в этом разделе!

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

Давайте посмотрим, как это выглядит:

# Объединение списков значений при объединении словарей
dict1 = {'a': [1, 2, 3], 'b': [1, 2]}
dict2 = {'c': [4, 5, 6, 7], 'a': [4, 5, 6]}

for key, value in dict2.items():
    if key in dict1:
        dict1[key].extend(value)
    else:
        dict1[key] = value

print(dict1)

# Возвращает: {'a': [1, 2, 3, 4, 5, 6], 'b': [1, 2], 'c': [4, 5, 6, 7]}

В следующем разделе вы узнаете некоторые встроенные методы для объединения словарей Python, начиная с цикла for.

Хотите узнать, как использовать функцию zip() Python для итерации по двум спискам? Этот учебник объясняет, что делает функция zip(), и показывает несколько креативных способов использования функции.

Объединение словарей Python с помощью цикла for

Наивная реализация объединения словарей — это использование цикла for в Python.

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

Давайте посмотрим, как это выглядит:

# Объединение двух словарей с общими ключами
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'a': 4}

for key, value in dict2.items():
    dict1[key] = value

print(dict1)

# Возвращает: {'a': 4, 'b': 2, 'c': 3}

В следующем разделе вы узнаете, как использовать включение словаря Python.

Объединение словарей Python с помощью включения словаря

Инключения словаря Python работают очень похоже на циклы for. Если вы хотите узнать больше о включениях словаря Python, ознакомьтесь с моим подробным учебником здесь.

Давайте посмотрим, как использовать включение словаря Python для объединения двух словарей:

# Объединение трех словарей с общими ключами
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'a': 4}

dict3 = {k: v for d in [dict1, dict2] for k, v in d.items()}

print(dict3)

# Возвращает: {'a': 4, 'b': 2, 'c': 3}

Заключение

В этом учебном пособии вы узнали, как использовать Python для объединения двух или более словарей. Вы узнали, как это делать с использованием встроенных методов, таких как оператор объединения |, доступный в Python 3.9 и выше, метод .update() и метод распаковки. Вы также узнали, как работать с дублирующимися ключами и объединять значения, состоящие из списков. Наконец, вы узнали о более наивных реализациях, таких как циклы for и включения словаря для объединения словарей.

Чтобы узнать больше о словарях Python, ознакомьтесь с официальной документацией здесь.

Last updated