Узнайте, как Python объединяет словари с помощью этих пяти надежных методов и приемов!

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

Тип данных словаря — это, по сути, неупорядоченный набор элементов данных, сгруппированных в пары ключ-значение. Словари и их пары ключ-значение определяются внутри фигурных скобок, каждая пара отделяется одной запятой. Точка с запятой между ними разделяет элементы Key и value. Индекс словаря может использовать все типы данных (в отличие от списков, в которых строго используются целые числа).

Словари слияния Python

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

Слияние словаря Python с оператором слияния

Этот простой оператор можно использовать только в версии Python 3.9 и выше!
Этот метод безоговорочно является лучшим способом выполнить чистое слияние словаря Python. Python представил оператор слияния для словарей 5 октября 2020 года, и он быстро стал популярным ресурсом для быстрого и безболезненного слияния словарей Python.

Вот некоторые из его плюсов и минусов:

Плюсы

  • Простота в использовании и удобство.

Минусы

  • Работает только в Python версии 3.9 и выше.
  • Можно объединить несколько словарей одновременно.

Наблюдения:

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

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

# Merging three Python dictionaries using the merge (|) operator. Works in Python 3.9 and above
dictionary_one = {
“A”: 1,
“B”: “2”,
}
dictionary_two = {
“C”: [“3”, “4”],
“D”: “5”,
}
dictionary_three = {
“B”: “6”,
“E”: “7”
}
merged_dictionary = dictionary_one | dictionary_two | dictionary_three
print (merged_dictionary)
Output
{‘A’: 1, ‘B’: ‘6’, ‘C’: [‘3’, ‘4’], ‘D’: ‘5’, ‘E’: ‘7’}

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

Вы заметили клавишу «В» и в первом, и в третьем словарях? Это обычно известно как общий ключ (или общий ключ). В нашем примере клавиша «B» является общей клавишей, и Python автоматически присвоил третьему назначенному словарем значение (6). Python будет по умолчанию использовать значение последнего ключа при объединении словарей с помощью этого и многих других методов и методов.

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

# Merging two Python dictionaries using the merge (|=) operator. Works in Python 3.9 and above.
dict1 = {‘a’: 1, ‘b’: 2}
dict2 = {‘c’: 3, ‘d’: 4}
dict1 |= dict2
print(dict1)
Output:
dict1 = {‘a’: 1, ‘b’: 2, ‘c’: 3, ‘d’: 4}

Объединение словарей в Python с оператором распаковки

Оператор распаковки раньше был инструментом по умолчанию для объединения словарей.
До появления оператора слияния/канала оператор распаковки ** был основным инструментом для объединения словарей в Python. По сути, вы объединяете два словаря и сохраняете все их пары ключей и значений в третьем словаре. Kwarg принимает именованные аргументы и поэтому идеально подходит для распаковки словарей.

Плюсы

  • Простота выполнения
  • Может объединять более двух словарей одновременно
  • Не будет работать с уже существующим словарем

Минусы

  • Этот метод работает, только если ключи второго словаря являются строками.

Наблюдения:

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

В следующем примере я создам три новых словаря с некоторыми из моих любимых киноактеров и фильмов и объединим их с помощью оператора распаковки.

# Merging two Python dictionaries using the unpack (**) operator.
d1 = {‘Dustin Hoffman’: ‘Rain Man’,
‘Jack Nicholson’: ‘The Shining’,
‘Al Pacino’: ‘Heat’}
d2 = {‘Robert De Niro’: ‘Goodfellas’,
‘Leonardo DiCaprio’: ‘The Departed’}
d3 = {‘Brad Pitt’: ‘Seven’,
‘Robin Williams’: ‘Good Will Hunting’}
d3 = {**d1, **d2, **d3}
print(d3)
Output:
{‘Dustin Hoffman’: ‘Rain Man’, ‘Jack Nicholson’: ‘The Shining’, ‘Al Pacino’: ‘Heat’, ‘Robert De Niro’: ‘Goodfellas’, ‘Leonardo DiCaprio’: ‘The Departed’, ‘Brad Pitt’: ‘Seven’, ‘Robin Williams’: ‘Good Will Hunting’}

Процесс прост, а результат сохранен в новом словаре (d3). Приведенный выше пример доказывает, что вы можете объединять словари в Python без использования оператора слияния; на самом деле, вы можете объединить более двух одновременно, что значительно сэкономит ваше время и усилия!

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

Следующий блок кода демонстрирует, какую ошибку вы получите, если забудете преобразовать свои ключи в строки, и как это исправить.

# Merging two Python dictionaries using the unpack (**) operator. Keys need to be strings, else it won’t work.
x = {1: ‘A’, 2: ‘B’}
y = {3: ‘C’, 4: ‘D’}
z = dict(x, **y)
print(z)
Output:
Traceback (most recent call last):
File “c:\Users\Dan\Desktop\Python Files\Dictionaries Merge Error.py”, line 5, in
z = dict(x, **y)
TypeError: keywords must be strings
# Merging two Python dictionaries using the unpack (**) operator. Keys need to be strings, else it won’t work.
x = {1: ‘A’, 2: ‘B’}
y = {“3”: ‘C’, “4”: ‘D’}
z = dict(x, **y)
print(z)
Output:
{1: ‘A’, 2: ‘B’, ‘3’: ‘C’, ‘4’: ‘D’}

Объединение двух словарей Python с помощью цикла for

Мы можем объединить два словаря Python с for loop, который перебирает каждую пару ключ-значение во втором словаре и объединяет их в первый словарь. К сожалению, этот метод также перезапишет значения общих ключей значениями ключей второго словаря. Вот плюсы и минусы этого метода.

Плюсы

  • Легко адаптировать и выполнять.

Минусы

  • Работает с двумя словарями одновременно.
  • Несколько неуклюжий, и это делает ваш код излишне загроможденным.

Наблюдения:

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

В этом примере мы будем использовать два словаря с описанием некоторых из моих любимых актрис и фильмов.

# Merging two dictionaries using a For Loop
dictionary_1 = {‘Meryl Streep’: “Kramer vs Kramer”, ‘Jodie Foster’: “Silence of the Lambs”}
dictionary_2 = {‘Sigourney Weaver’: “Alien”, ‘Charlize Theron’: “The Devil’s Advocate”}
for key, value in dictionary_2.items():
dictionary_1[key] = value
print(dictionary_1)
Output:
{‘Meryl Streep’: ‘Kramer vs Kramer’, ‘Jodie Foster’: ‘Silence of the Lambs’, ‘Sigourney Weaver’: ‘Alien’, ‘Charlize Theron’: “The Devil’s Advocate”}

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

Для нашего следующего метода мы объединим два инструмента, которые мы уже рассмотрели: слияние словарей Python с оператором Unpack и файл for loop. При этом мы сможем сохранить все значения, присвоенные общим ключам в словарях.

Плюсы

  • Простота в использовании и удобство.
  • Позволяет визуализировать значения, присвоенные общим клавишам.

Минусы

  • Работает с двумя словарями, что делает этот процесс потенциально медленным.

Наблюдения:

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

Для этого примера я возьму свой первоначальный словарь любимых актеров и фильмов и включу некоторые из их других замечательных выступлений. Таким образом, некоторые из этих ключей (актеров) будут иметь дополнительные значения (фильмы).

# Merging two Python dictionaries while preserving values shared across common keys.
shared_dictionary_1 = {‘Robert De Niro’: ‘Heat’,
‘Jack Nicholson’: ‘The Shining’,
“Al Pacino”: “Heat”}
shared_dictionary_2 = {‘Robert De Niro’: ‘Goodfellas’,
“Leonardo DiCaprio”: “The Departed”,
‘Al Pacino’: “The Devil’s Advocate”,
“Robin Williams”: ‘Good Will Hunting’}
def mergeDictionary(shared_dictionary_1, shared_dictionary_2):
shared_dictionary_3 = {**shared_dictionary_1, **shared_dictionary_2}
for key, value in shared_dictionary_3.items():
if key in shared_dictionary_1 and key in shared_dictionary_2:
shared_dictionary_3[key] = [value , shared_dictionary_1[key]]
return shared_dictionary_3
shared_dictionary_3 = mergeDictionary(shared_dictionary_1, shared_dictionary_2)
print(shared_dictionary_3)
Output:
{‘Robert De Niro’: [‘Goodfellas’, ‘Heat’], ‘Jack Nicholson’: ‘The Shining’, ‘Al Pacino’: [“The Devil’s Advocate”, ‘Heat’], ‘Leonardo DiCaprio’: ‘The Departed’, ‘Robin Williams’: ‘Good Will Hunting’}

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

Python Merge Two Dictionary: метод обновления

Метод update() позволяет Python объединить два словаря всего несколькими строками кода. Python обновляет ключи и значения словаря №1 с помощью ключей и значений словаря №2, эффективно работая со словарем №1. Как и в случае с другими методами, значения общих ключей будут принимать значения из словаря №2.

Вот краткое изложение плюсов и минусов этого метода слияния двух словарей Python:

Плюсы

  • Легко использовать
  • Этот подход работает с Python 2 и Python 3, поэтому это «наиболее безопасный вариант» при объединении двух словарей.
  • Работает с уже существующим словарем.

Минусы

  • Работает с уже существующим словарем (потенциально это может быть аферой, поэтому я также включил его сюда).
  • Невозможно объединить более двух словарей одновременно.

Наблюдения:

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

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

# Merging two dictionaries using the Update Method
music_dict_1 = {“You Never Can Tell”: “Chuck Berry”, “Eli”: “Bosnian Raindbows”, “Dire Straits” : “Money for Nothing” }
music_dict_2 = {“Detroit Spinners”: “Rubberband Man”,”Space Invader”: “The Pretenders”,”Dire Straits” : “Walk of Life”}
music_dict_1.update(music_dict_2)
print(‘New Music Dictionary:’)
print(music_dict_1)
Output:
{‘You Never Can Tell’: ‘Chuck Berry’, ‘Eli’: ‘Bosnian Raindbows’, ‘Dire Straits’: ‘Walk of Life’, ‘Detroit Spinners’: ‘Rubberband Man’, ‘Space Invader’: ‘The Pretenders’}

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

Обзор

Существует множество способов запросить слияние словарей Python, но для краткости я решил показать пять самых простых и безопасных способов слияния ваших словарей. Каждая техника и метод имеет свои преимущества (и недостатки!); как всегда, все сводится к выбору решения, которое наилучшим образом соответствует вашим текущим потребностям и ресурсам.

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

Статья 5 безошибочных способов объединения словарей в Python впервые появилась на alpharithms и была опубликована здесь с разрешения.