Объединение или слияние двух словарей в один новый словарь
Значения ключей словаря dict2 имеют приоритет, когда dict1 и dict2 используют одинаковые ключи key .
Важно понимать отличие операции объединения/слияния словарей от операции обновления/дополнения. Отличие заключается в том, что в результате операции объединения/слияния <**dict1, **dict2>образуется новый словарь (исходные словари не изменяются), а при операции обновления/дополнения изменяется исходный словарь dict .
Примеры объединение двух словарей в один словарь:
>>> x = "key1": "value1 from x", "key2": "value2 from x"> >>> y = "key2": "value2 from y", "key3": "value3 from y"> # объединение словаря `x` с `y` >>> **x, **y> # # объединение словаря `y` с `x` >>> **y, **x> # # Новое в Python 3.9 >>> x | y # >>> y | x #
- ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
- Представления словарей dict.keys, dict.values и dict.items
- Исходный словарь для представления dictview.mapping
- Получение списка ключей словаря list(dict)
- Количество элементов в словаре len(dict)
- Доступ к значению словаря по ключу dict[key]
- Добавление/изменение значения словаря по ключу key
- Удаление значения словаря по ключу
- Проверка наличия/отсутствия ключа key в словаре dict
- Проверка наличия/отсутствия значения value в словаре Python
- Проверка наличия/отсутствия пары (key, value) в словаре dict
- Итерирование по ключам и значениям словаря Python
- Метод dict.clear(). Очистить словарь
- Метод dict.copy(), копия словаря
- Метод dict.fromkeys(), словарь с ключами по умолчанию
- Метод dict.get(), значение по умолчанию если ключа нет
- Метод dict.items(), список кортежей
- Метод dict.keys(), список ключей словаря
- Метод dict.values(), список значений словаря
- Метод dict.pop()
- Метод dict.popitem(), получить пару ключ/значение
- Метод dict.setdefault(), получает/вставляет значение ключа
- Метод dict.update(), обновление/дополнение словаря
- Объединение двух словарей в новый словарь Python
- Сортировка словаря по значению и/или ключу
- Обратный порядок/реверс словаря reversed(dict)
- Генератор словаря и его использование
- Фильтр словаря по ключам и/или значениям
- Словарь как фабрика функций
ХОЧУ ПОМОЧЬ
ПРОЕКТУ
Как объединить два словаря в один python
Программисту приходится решать различные задачи, а у начинающих программистов иногда возникают вопросы «А как
сделать это. «. Сегодня я расскажу вам как в Python можно объединить два словаря в один.
Итак у нас имеется словари x и y с такими данными:
Необходимо объединить эти два словаря. Объединенить их можно следующим образом.
x = y = z = <**x, **y>print(z)
В этом примере если ключи словарей будут совпадать будет перезаписан значением второго словаря
Как объединить два словаря Python
В предыдущем уроке мы узнали о словарях Python и увидели, что они считаются неупорядоченными наборами с парой key/value , где ключи используются для доступа к элементам, а не к позиции, как, например, в списках .
В этом кратком совете я собираюсь показать вам, как объединить (объединить) два словаря вместе.
Метод обновления ()
Допустим, у нас есть следующие два словаря:
Как мы можем объединить эти два словаря в один словарь? В этом отношении мы можем использовать функцию update([other]) . Как указано в документации Python:
Обновите словарь парами ключ / значение из других , перезаписав существующие ключи. Возврат None .
update() принимает либо другой объект словаря, либо итерацию пар ключ / значение (в виде кортежей или других итераций длиной два). Если заданы аргументы ключевого слова, словарь обновляется этими парами ключ / значение: d.update(red=1, blue=2) .
Итак, чтобы объединить два вышеупомянутых словаря, мы можем набрать следующее:
Скажем, что вы набрали следующее утверждение, чтобы просмотреть результаты:
В этом случае вы получите None ! Это потому, что функция update() не возвращает новый словарь. Чтобы получить результат конкатенации, просто введите следующее:
В этом случае вы получите следующий вывод:
Что делать, если мы сделали следующее?
dict1.update(dict2)
print dict1
В этом случае вы получите следующий вывод:
Обратите внимание, что в первом случае, dict2.update(dict1) , мы обновляем словарь dict2 ключ / значение из dict1 и перезаписываем любые существующие ключи. Существующий ключ, как мы можем заметить, это ‘bookC’ , который в этом случае будет иметь значение 3 , поскольку мы обновляем пары ключ / значение из dict1 . Это будет полностью изменено в последнем случае, dict1.update(dict2) , где мы обновляем словарь dict1 ключ / значение из dict2 .
Однако существует проблема в использовании update() для объединения двух словарей. Проблема заключается в том, что оригинальный словарь может быть изменен. Другими словами, в первом случае, например, dict2.update(dict1) , оригинальная версия dict2 может быть изменена, а в последнем случае dict1.update(dict2) оригинальная версия dict1 может быть изменена. То есть вы можете использовать update() для объединения двух словарей, если вы не заинтересованы в сохранении исходной версии словаря, который вам нужно обновить. Под оригинальной версией здесь я подразумеваю сохранение значения ключа.
Объединение двух словарей в одном выражении
Другой способ, который вы можете использовать для объединения двух словарей, где вы можете выполнить такую задачу в одном выражении, заключается в следующем:
print dict(dict2, **dict1)
Результат этого утверждения:
Таким образом, dict1 переопределяет dict2 . Если мы хотим, чтобы dict2 переопределил dict1 , мы dict1 :
print dict(dict1, **dict2)
Выход в этом случае будет:
Сохранение ключевых значений
Возвращаясь к предыдущему вопросу о сохранении значений ключей, как мы можем объединить два словаря, сохраняя оригиналы каждого словаря?
Обходной путь для этого может быть следующим (взятый из ответа в этом потоке StackOverflow ):
Как объединить словари в Python
В Python словарь – это коллекция, которую вы используете для хранения данных в парах . Словарь является упорядоченной и изменяемой структурой. Кроме того, он не может хранить повторяющиеся данные. В этой статье мы расскажем, как объединить словари в Python и как это можно сделать разными способами.
Итак, давайте начнем с того, что же представляет из себя словарь вообще. Мы пишем словарь, используя фигурные скобки. Это выглядит следующим образом:
my_dict =
Иногда нам нужно объединить два или более словарей, чтобы создать словарь большего размера. К примеру, у нас есть словари dict_one и dict_two :
dict_one = < "id": 1, "name": "Ashutosh", "books": ["Python", "DSA"] >dict_two = < "college": "NSEC", "city": "Kolkata", "country": "India" >merged_dict =
В merged_dict у нас есть пары ключ-значение как из словаря dict_one , так и из dict_two . Это то, чего мы и хотим достичь с помощью кода.
В Python есть несколько способов сделать объединить словари. Вы можете использовать:
- цикл for
- метод dict.update()
- оператор **
- оператор объединения | (доступно для Python 3.9 и выше)
Давайте исследуем каждый из этих вариантов по порядку!
Как объединить словари в Python с помощью цикла for
Мы можем объединить два или более словарей, используя цикл for следующим образом:
dict_one = < "id": 1, "name": "Ashutosh", >dict_two = < "books": ["Python", "DSA"], "college": "NSEC", >dict_three = < "city": "Kolkata", "country": "India" >for key,value in dict_two.items(): merged_dict[key] = value merged_dict # for key,value in dict_three.items(): merged_dict[key] = value merged_dict #
Но проблема данного метода в том, что нам приходится запускать такой цикл для объединения словарей множество раз. Если нам просто нужно объединить два словаря, то это не будет проблемой. Но если у нас уже три словаря, то код становится громоздким. Что уж говорить о случаях, когда у нас больше трех словарей!
Очевидно, что данный метод не соответствует одному из главных принципов написания кода в Python – DRY (Don’t repeat yourself – не повторяйся). Поэтому данный цикл for можно, к примеру, поместить в функцию, и тогда код станет явно чище. Однако всё-таки это слишком замороченный способ для такой простой задачи, как объединение словарей. Поэтому стоит поискать уже готовые, встроенные в Python решения.
Итак, какой у нас есть еще вариант?
Как объединить словари в Python с помощью метода dict.update()
Самый очевидный путь – найти уже готовую функцию, то есть посмотреть на то, какие есть встроенные методы у словарей. Если вы исследуете класс словарей dict , вы найдете много различных методов. Один из них — метод update() , который можно использовать для «вливания» одного словаря в другой. Он нам и нужен! Решение нашей задачи с помощью этого метода будет выглядеть следующим образом:
dict_one = < "id": 1, "name": "Ashutosh", "books": ["Python", "DSA"] >dict_two = < "college": "NSEC", "city": "Kolkata", "country": "India" >dict_one.update(dict_two) dict_one #
Но с использованием метода update() связана одна проблема. Этот метод изменяет один из словарей. Если мы хотим создать третий словарь без изменения исходных, мы не можем использовать этот метод.
Кроме того, мы можем использовать этот метод только для объединения двух словарей за раз. Если мы захотим объединить три словаря, то нам сначала придется объединить первые два, а затем добавить третий к измененному словарю.
То есть мы имеем ту же проблему, что и при объединении словарей в цикле: для двух словарей – это рабочий вариант. Однако в случае трех и более словарей, становится уже неудобно. Для трех словарей код будет выглядеть следующим образом:
dict_one = < "id": 1, "name": "Ashutosh", >dict_two = < "books": ["Python", "DSA"], "college": "NSEC", >dict_three = < "city": "Kolkata", "country": "India" >dict_one.update(dict_two) dict_one # dict_one.update(dict_three) dict_one #
Давайте рассмотрим другие варианты.
Как объединить словари в Python с помощью оператора **
Вы можете использовать метод двойной звездочки ( ** ) для распаковки или расширения словаря. К примеру, это может выглядеть следующим образом:
dict_one = < "id": 1, "name": "Ashutosh", >dict_two = < "books": ["Python", "DSA"] "college": "NSEC", >dict_three = < "city": "Kolkata", "country": "India" >merged_dict = <**dict_one, **dict_two, **dict_three>merged_dict #
При использовании оператора ** для объединения словарей исходные словари не изменяются. Поэтому данный метод крайне удобен, если мы хотим объединить словари в один, при этом не затрагивая их самих.
Кроме того, данный вариант также отлично подойдет, если нам нужно объединить три и более словарей. Нужно просто через запятую указать все словари, которые вы хотите включить в новый объединенный. Не забудьте перед каждым словарем указать двойные звездочки ** .
Этот способ, однозначно, превосходит первые два и хорош в использовании. Но давайте рассмотрим ещё один.
Как объединить словари в Python с помощью оператора |
Начиная с Python 3.9, мы можем использовать оператор | для объединения двух или более словарей. Это выглядит следующим образом:
dict_one = < "id": 1, "name": "Ashutosh", >dict_two = < "books": ["Python", "DSA"], "college": "NSEC", >dict_three = < "city": "Kolkata", "country": "India" >merged_dict = dict_one | dict_two | dict_three merged_dict #
Это наиболее удобный способ объединения словарей в Python. Это простое и элегантное решение, которое стоит взять на заметку и использовать. Единственное, что стоит учитывать – это версию Python, которая установлена на ваш компьютер. Советуем обновить Python до последней версии и использовать все дополнительные «плюшки». Подробнее про улучшение Python в версии 3.9 можно почитать здесь.
Заключение
Таким образом, мы исследовали несколько различных методов объединения словарей. Если у вас Python 3.9 или выше, следует использовать оператор | . Но если вы по какой-то причине используете более старые версии Python и не хотите переходить на версию 3.9 и выше, вы можете использовать другие методы. Конечно, в таком случае лучше всего подойдет метод двойной звездочки ** . Однако в некоторых случаях можно использовать и цикл for , и метод update() .
Одним словом, выбирайте то, что вам больше по душе! Надеемся, что данная статья была вам полезна! Успехов в написании кода!