Объединение или слияние двух словарей в один новый словарь
Значения ключей словаря 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)
- Генератор словаря и его использование
- Фильтр словаря по ключам и/или значениям
- Словарь как фабрика функций
ХОЧУ ПОМОЧЬ
ПРОЕКТУ
Как объединить 2 словаря 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 ):
Как объединить два словаря в один таким образом, чтобы связывались ссылки
То есть создал я dictUNION = x | y и сколько бы раз я там что бы ни менял в этих x и y dictUNION должен всегда при его выводе отображать актуальное объединение x и y, а не то, которое я делал при его создании
11 апр 2022 в 11:22
x = dict1 | dict2 print(x)
просто оператор объеденения |
Отслеживать
ответ дан 11 апр 2022 в 11:08
452 2 2 серебряных знака 11 11 бронзовых знаков
Не работает. Просто перезаписываются значения без ссылок
11 апр 2022 в 11:14
dict1 = dict() dict2 = dict() dict1[«поле»] = 1 dict2[«кукуруза»] = 2 dictunion = dict1 | dict2 print(dictunion) # dict1[«поле»] = 10 dict2[«кукуруза»] = 20 print(dictunion)
11 апр 2022 в 11:18
я вас не понимаю что значит ссылка в вашем понимании?
11 апр 2022 в 11:35
у вас всегда актуальное значение будет. Если ходите переопределить то просто x[‘поле’]=новое значение
11 апр 2022 в 11:36
x я менять не собираюсь, меняются только поля dict1 и dict2. И как только я меняю любые поля dict1 или dict2, x не отображает актуальную информацию, а лишь прошлую, когда я присваивал x = dict1 | dict2. Когда говорю про ссылки, я имею в виду тот факт, что в x должна быть записана ссылка на dict1 и на dict2, а не новые объекты ключ — значение
