Как объединить два словаря в Python

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

Введение

Часто бывают ситуации, когда в Python есть два словаря, которые вы хотели бы объединить.

Некоторые решения доступны не для всех версий Python, поэтому мы рассмотрим способы слияния для отдельных выпусков.

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

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

Слияния обычно происходят справа налево, так как dict_a <- dict_b. Если в обоих словарях есть общий ключ, то значение второго словаря перезаписывает значение первого.

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

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

В этой статье мы будем использовать два словаря, а именно:

Словари со значениями

a = {1:'peanut', 2:'butter', 3:'jelly', 4:'time'}
b = {1:'fish', 2:'chips'}         

Словари с вложенными значениями

c = {1: ['peanut','butter','jelly','time'], 2:['fish','chips']}
d = {1: ['fish','chips'], 2:['peanut','butter','jelly','time']}

Python 3.9 и выше

Начиная с версии Python 3.9, мы можем использовать операторов слияния (знак |) ставится для объединения двух словарей:

x = a | b
print(x)

{1: 'fish', 2: 'chips', 3: 'jelly', 4: 'time'}         

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

y = c | d
print(y)
 
{1: ['fish', 'chips'], 2: ['peanut', 'butter', 'jelly', 'time']}

Python 3 и выше

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

x = {**a, **b}
print(x)

{1: 'fish', 2: 'chips', 3: 'jelly', 4: 'time'}

То же самое и со словарями со значениями вложенных списков. Значения дублирующихся ключей будут перезаписаны следующим образом:

y = {**c, **d}
print(y)

{1: ['fish', 'chips'], 2: ['peanut', 'butter', 'jelly', 'time']}

Python 2 и выше

В устаревших версиях Python приведенные выше фрагменты не будут работать. В более поздних версиях слияние может быть облегчено путем объединения элементов словаря или dict_items обеих переменных.

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

Использование items()

Начнем с объединения с items():

x = dict(a.items() + b.items())
print(x)

{1: 'fish', 2: 'chips', 3: 'jelly', 4: 'time'}

Приведенный выше синтаксис подходит для простых значений. Для вложенного словаря, содержащего значения списка, items() вызов необходимо преобразовать в list() а затем объединить:

y = dict(list(c.items()) + list(d.items()))
print(y)

{1: ['fish', 'chips'], 2: ['peanut', 'butter', 'jelly', 'time']}

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

Использование update()

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

x = a.copy()
x.update(b)
print (x)

{1: 'fish', 2: 'chips', 3: 'jelly', 4: 'time'}

Добавление значений списка во все версии Python

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

Это можно сделать, используя метод  extend() показанный ниже:

for k, v in d.items():
    if k in c:
        c[k].extend(v)
    else:
        c[k] = v
print(c)

{1: ['peanut', 'butter', 'jelly', 'time', 'fish', 'chips'], 2: ['fish', 'chips', 'peanut', 'butter', 'jelly']}

Вывод

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




close

Изучаешь Python?

Оформи подписку и получи моментальный доступ к новым публикациям

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

Поделиться записью в социальных сетях

Добавить комментарий

Ваш адрес email не будет опубликован