Рубрики
Без рубрики

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

Резюме: Чтобы объединить два словари Dict1 и Dict2 в одном выражении, используйте функцию распаковки словаря Z = {** DICT1, ** DICT2}. Это создает новый словарь и распаковывает все пары (ключевое значение) в новый словарь. Дублирующиеся ключи автоматически разрешены этим методом. Dict1 = {‘Value1’: 100, «Значение»: 200} Dict2 = {‘Значение’: 300, ‘Value2’: 400} … Как объединить два словаря Python в одном выражении в Python? Читать далее “

Автор оригинала: Shubham Sayon.

Резюме : Объединить два словаря Dict1 и Dict2 В одном выражении используйте Словарь распаковка функции z = {** Dict1, ** Dict2} Отказ Это создает новый словарь и распаковывает все пары (ключевое значение) в новый словарь. Дублирующиеся ключи автоматически разрешены этим методом.

dict1 = {'value1': 100, 'value': 200}
dict2 = {'value': 300, 'value2': 400}

print("dict1: ", dict1)
print("dict2: ", dict2)

z = {**dict1, **dict2} 

print("MERGED DICTIONARY: ", z)

Упражнение : Какой из дублированной записи заканчивается в словаре?

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

  1. Словарь распаковки с **
  2. Используя лямбда функция.
  3. Используя Словарь понимание Отказ
  4. Использование Chainmap контейнер.
  5. Использование |. оператор.
  6. Преобразовать в списки и объединение в одну строку.
  7. Использование Itertools.Chain ()
  8. Используя Пользовательская функция Отказ

Мастеринг словари является одним из вещей, которые различают экспертные кодеры из промежуточных кодов. Почему? Потому что словари в Питон иметь много отличных свойств с точки зрения время выполнения И они очень просты в использовании и понимаете. Ты не можешь Написать эффективный код В Python не используя эту мощную структуру данных. Итак, давайте погрузимся в критический вопрос:

Проблема: Даны два словаря; Как объединить два словаря, используя одно выражение?

Рассмотрим следующий фрагмент для справки:

dict1 = {'value1': 100, 'value': 200}
dict2 = {'value': 300, 'value2': 400}
dict1.update(dict2)
print(dict1)

Выход:

dict1:  {'value1': 100, 'value': 200 , 'value': 400}

Здесь вывод является желаемым решением, которое мы хотим, однако, оператор обновления изменяет содержимое Dict1 Что не то, что мы хотим. Целью кода является поиск решения, который найдет объединение двух словарей без изменения содержимого исходных словарей. Кроме того, полученный словарь должен иметь значения, такие общие значения Dict2 Переопределить содержимое Dict1 Как показано в приведенном выше примере.

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

Способ 1: Использование ** kwargs

В Python 3.5 и выше мы можем использовать ключевое слово . Аргумент синтаксиса (** kwargs) для достижения нашего выхода в одном выражении. Использование двойной звездочки ** Синтаксис Мы можем пройти все элементы двух словарей и хранить их в третьем словаре, не изменяя элементы исходных словарей ( Dict1 и Dict2 в нашем случае).

Приведенный ниже код объясняет вышеуказанную концепцию ( Пожалуйста, следуйте комментариям для лучшего захвата в коде) :

dict1 = {'value1': 100, 'value': 200}
dict2 = {'value': 300, 'value2': 400}
print("dict1: ", dict1)
print("dict2: ", dict2)
z = {**dict1, **dict2}  # using ** syntax to pass and store contents of dict1 and dict2 in z
print("MERGED DICTIONARY: ", z)

Выход:

dict1:  {'value1': 100, 'value': 200}
dict2:  {'value': 300, 'value2': 400}
MERGED DICTIONARY:  {'value1': 100, 'value': 300, 'value2': 400}

Здесь мы также можем использовать z = Dict (Dict2, ** Dict1) Вместо того, чтобы использовать z = {** Dict1, ** Dict2} что даст тот же результат. Попробуйте сами, чтобы получить это!

Способ 2: Использование функции лямбда

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

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

dict1 = {'value1': 100, 'value': 200}
dict2 = {'value': 300, 'value2': 400}
print("dict1: ", dict1)
print("dict2: ", dict2)
"""lambda function that accepts and copies dict1 in l,
then updates l by merging it with dict1 and
finally returning the value of l """
merge = (lambda l=dict1.copy(): (l.update(dict2), l)[1])()
print("MERGED DICTIONARY: ", merge)

Выход:

dict1:  {'value1': 100, 'value': 200}
dict2:  {'value': 300, 'value2': 400}
MERGED DICTIONARY:  {'value1': 100, 'value': 300, 'value2': 400}

Способ 3: Использование контейнера Chainmap

Python 3 имеет Chainmap Контейнер, который используется для инкапсулирования двух или более словарей в один словарь. Таким образом, мы можем использовать цепочку для объединения наших словарей, как показано в следующем коде:

from collections import ChainMap
dict1 = {'value1': 100, 'value': 200}
dict2 = {'value': 300, 'value2': 400}
merge = dict(ChainMap({}, dict2, dict1))
print("dict1: ", dict1)
print("dict2: ", dict2)
print("MERGED DICTIONARY: ", merge)

Выход:

dict1:  {'value1': 100, 'value': 200}
dict2:  {'value': 300, 'value2': 400}
MERGED DICTIONARY:  {'value1': 100, 'value': 300, 'value2': 400}

Метод 4: Определение функции для возврата объединенного словаря

** kwargs Был определен в документации Python 3.5 и не был реализован в предыдущих версиях. Однако многие организации все еще управляют своим кодом на более старых версиях Python, поэтому обходной путь в таких ситуациях состоит в том, чтобы создать функцию и использовать Обновление () и Копировать () Методы, а затем вернуть выход.

Давайте посмотрим на код, приведенный ниже, чтобы понять понятие выше.

( Пожалуйста, следуйте комментариям для лучшего захвата в коде) :

dict1 = {'value1': 100, 'value': 200}
dict2 = {'value': 300, 'value2': 400}
print("dict1: ", dict1)
print("dict2: ", dict2)


def combine_dicts(a, b):
  merge = a.copy()  # Returning a shallow copy of the list dict1, that is copying contents of dict1 in merge
  merge.update(b)  # merging contents dictionary merge and dict2
  return merge  # returning the merged dictionary


z = combine_dicts(dict1, dict2)  # calling function using a single expression
print("MERGED DICTIONARY: ", z)

Выход:

dict1:  {'value1': 100, 'value': 200}
dict2:  {'value': 300, 'value2': 400}
MERGED DICTIONARY:  {'value1': 100, 'value': 300, 'value2': 400}

Метод 5: Использование словаря.

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

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

dict1 = {'value1': 100, 'value': 200}
dict2 = {'value': 300, 'value2': 400}
result = {key:value for d in [dict1,dict2] for key,value in d.items()}
print(result)

Выход:

{'value1': 100, 'value': 300, 'value2': 400}

Метод 6: Преобразовать в список и объединение

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

Давайте посмотрим на следующую программу, которая объясняет вышеуказанную концепцию. ( Отказ от ответственности: это работает для Python 3 и выше .)

dict1 = {'value1': 100, 'value': 200}
dict2 = {'value': 300, 'value2': 400}
result = dict(list(dict1.items()) + list(dict2.items())) 
print(result)

Выход:

{'value1': 100, 'value': 300, 'value2': 400}

Метод 7: Использование ITERTOOLS.CHAIN

цепь () это метод в Itertools Модуль, который принимает серию по величинам, а затем возвращает один итеративный. Сгенерированный выход, который является единым истереным, не может быть использован напрямую и должен быть явно преобразован. Этот метод позволяет избежать создания дополнительных списков, как в методе 6; Следовательно, это более эффективно.

Давайте посмотрим на следующий код, который упрощает для нас вещей:

from itertools import chain
dict1 = {'value1': 100, 'value': 200}
dict2 = {'value': 300, 'value2': 400}
result = dict(chain(dict1.items(),dict2.items())) 
print(result)

Выход:

{'value1': 100, 'value': 300, 'value2': 400}

Способ 8: Использование | оператор

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

Отказ от ответственности: код будет работать только в Python3.9 или более поздних версиях Отказ

dict1 = {'value1': 100, 'value': 200}
dict2 = {'value': 300, 'value2': 400}
merge = dict1 | dict2
print("dict1: ", dict1)
print("dict2: ", dict2)
print("MERGED DICTIONARY: ", merge)

Выход:

dict1:  {'value1': 100, 'value': 200}
dict2:  {'value': 300, 'value2': 400}
MERGED DICTIONARY:  {'value1': 100, 'value': 300, 'value2': 400}

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

import collections

dict1 = {'value1': 100, 'value': 200}
dict2 = {'value': 300, 'value2': 400}
merge = collections.ChainMap(dict1, dict2).maps
print("MERGED DICTIONARY: ", merge)

Заключение

В этой статье мы узнали следующие методы объединения двух словарей в одном выражении:

  1. Словарь распаковки с **
  2. Использование функции лямбда.
  3. Использование Chainmap контейнер.
  4. Используя пользовательскую функцию.
  5. Используя понимание словаря.
  6. Преобразовать в список элементов и ConcateNate.
  7. Использование Itertools.Chain ()
  8. Использование |. оператор.

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

Куда пойти отсюда?

Достаточно теории, давайте познакомимся!

Чтобы стать успешным в кодировке, вам нужно выйти туда и решать реальные проблемы для реальных людей. Вот как вы можете легко стать шестифункциональным тренером. И вот как вы польские навыки, которые вам действительно нужны на практике. В конце концов, что такое использование теории обучения, что никто никогда не нуждается?

Практические проекты – это то, как вы обостряете вашу пилу в кодировке!

Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?

Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.

Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.

Присоединяйтесь к свободному вебинару сейчас!

Я профессиональный Python Blogger и Content Creator. Я опубликовал многочисленные статьи и создал курсы в течение определенного периода времени. В настоящее время я работаю полный рабочий день, и у меня есть опыт в областях, таких как Python, AWS, DevOps и Networking.

Вы можете связаться со мной @: