Python Dictionary update() — это встроенная функция, которая принимает в качестве аргумента другой словарь или объект Iterable(набор пар ключ-значение). Он объединяет содержимое этого переданного словаря или Iterable в текущий словарь. Метод update() не создает новый словарь; он изменяет содержимое существующего словаря.
Есть два способа, которыми мы можем использовать для объединения двух и более словарей в Python.
- Объединение двух или более словарей, используя dict.update()
- Объединение двух или более словарей, используя **kwargs
Давайте посмотрим, как Python объединяет два примера словаря.
Объединение двух или более словарей, используя dict.update()
Python Dictionary update() — это встроенный метод, который обновляет один словарь элементами другого объекта словаря или итерируемым значением пары ключей. Если ключ отсутствует в словаре, он сначала добавляет ключ в словарь. После этого он объединяет значение; в противном случае, если ключ уже присутствует в словаре, он просто обновляет значение.
Короче говоря, он принимает другой словарь или объект Iterable (набор пар ключ-значение) в качестве аргумента. Затем объединяет содержимое этого переданного словаря или Iterable в текущий словарь.
См. следующий код.
|
1 2 3 4 5 6 7 8 9 10 |
# app.py dictA = {'asa': 11, 'emma': 19, 'eric' : 21} dictB = {'millie': 46, 'finn': 23, 'noah' : 18} dictA.update(dictB) print('Updated dictionary A :') print(dictA) |
Вывод:
|
1 2 |
Updated dictionary 1 : {'asa': 11, 'emma': 19, 'eric': 21, 'millie': 46, 'finn': 23, 'noah': 18} |
Из вывода видно, что все элементы из dictB добавляются в dictA. В этом примере все ключи из обоих словарей уникальны.
Давайте возьмем пример, в котором некоторые ключи одинаковы для обоих словарей, и посмотрим на результат.
|
1 2 3 4 5 6 7 8 9 10 |
# app.py dictA = {'asa': 11, 'emma': 19, 'eric' : 21} dictB = {'asa': 46, 'finn': 23, 'eric' : 18} dictA.update(dictB) print('Updated dictionary A :') print(dictA) |
Выход:
|
1 2 |
Updated dictionary A : {'asa': 46, 'emma': 19, 'eric': 18, 'finn': 23} |
Итак, из вывода видно, что ключи, общие для обоих словарей, будут содержать значения, как в dictB. Словарь, который мы передаем методу update() в качестве аргумента, переопределит значения стандартного ключа. Поэтому ‘asa’ имеет значение 46, а ‘eric’ теперь имеет значение 18.
Таким образом, значение второго словаря переопределит значение первого словаря, если ключи одинаковы в обоих словарях при выполнении update().
Метод update() не создает новый словарь(dictA), он обновляет содержимое первого словаря(dictA).
Давайте рассмотрим второй способ объединения двух словарей.
Используя **kwargs
Специальный синтаксис **kwargs в python используется для передачи списка аргументов переменной длины с ключевыми словами. Мы используем имя kwargs с двойной звездой.
Основная причина в том, что двойные звездочки позволяют нам передавать любое количество аргументов ключевого слова.
- Аргумент ключевого слова — это место, где вы предоставляете имя переменной при передаче ее в функцию.
- Вы можете думать о kwargs как о словаре, который сопоставляет каждое ключевое слово со значением, которое мы передаем вместе с ним. Вот почему, когда мы перебираем kwargs, кажется, что нет никакого порядка, в котором они были напечатаны.
Например, у нас есть словарь, подобный следующему.
|
1 |
dictA = {'asa': 11, 'emma': 19, 'eric' : 21} |
Когда мы применяем **(двойная звезда) к dictA, он десериализует содержимое словаря в набор пар ключ-значение, как показано ниже.
|
1 |
**dictA |
Эквивалентно этому.
|
1 |
'asa': 11, 'emma': 19, 'eric' : 21 |
Теперь посмотрите на следующий код.
|
1 2 3 4 5 6 7 8 9 10 |
# app.py dictA = {'asa': 11, 'emma': 19, 'eric' : 21} dictB = {'millie': 46, 'finn': 23, 'noah' : 18} dictC = {**dictA, **dictB} print('Combined Dictionary C :') print(dictC) |
В приведенном выше коде мы создаем третий словарь и присваиваем этим словарям десериализованные значения двух словарей.
Итак, мы получаем объединенный dictC, который является третьим словарем, и он не изменяет содержимое двух существующих словарей.
Вывод:
|
1 2 |
Combined Dictionary C : {'asa': 11, 'emma': 19, 'eric': 21, 'millie': 46, 'finn': 23, 'noah': 18} |
**dictA и **dictB расширили содержимое обоих словарей до набора пар ключ-значение. Поэтому создается новый словарь dictC, содержащий данные из обоих словарей. Здесь также, если первый и второй словари имеют одинаковые ключи, то значение второго словаря переопределит значение первого.
Если вы измените порядок, как это.
|
1 |
dictC = {**dictB, **dictA} |
Тогда содержимое dictA переопределит содержимое dictB. Так что здесь важен порядок.
Объединение трех словарей в Python
Давайте возьмем три словаря и объединим их все и создадим четвертый словарь.
|
1 2 3 4 5 6 7 8 9 10 11 12 |
# app.py dictA = {'asa': 11, 'emma': 19, 'eric' : 21} dictB = {'millie': 46, 'finn': 23, 'noah': 18} dictC = {'penny': 29, 'sheldon': 36, 'leonard': 2} dictD = {**dictA, **dictB, **dictC} print('Combined Dictionary D :') print(dictD) |
Вывод:
|
1 2 |
Combined Dictionary D : {'asa': 11, 'emma': 19, 'eric': 21, 'millie': 46, 'finn': 23, 'noah': 18, 'penny': 29, 'sheldon': 36, 'leonard': 2} |
Заключение

Объединение двух или более словарей — простая задача в Python. Но найти лучший подход — сложный выбор для каждого разработчика. Если у вас нет никаких последствий изменения существующего словаря, вы можете использовать метод dict.update(), в противном случае используйте подход **kwargs.
