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

Python 3.9+:

dict1 | dict2

Python 3.5+:

{**dict1, **dict2}

До Python 3.5:

dict1.copy()
dict1.update(dict2)

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

1. Используя оператор | (начиная с Python 3.9):


    dict1 = {'a': 1, 'b': 2}
    dict2 = {'c': 3, 'd': 4}

    merged_dict = dict1 | dict2
    print(merged_dict)  # Output: {'a': 1, 'b': 2, 'c': 3, 'd': 4}

    # Если есть повторяющиеся ключи, то значения из второго словаря (dict2) перезапишут значения из первого (dict1)
    dict3 = {'a': 5, 'e': 6}
    merged_dict = dict1 | dict3
    print(merged_dict)  # Output: {'a': 5, 'b': 2, 'e': 6}
  

Этот способ наиболее лаконичный и читаемый, если вы используете Python 3.9 или новее.

2. Используя метод update():


    dict1 = {'a': 1, 'b': 2}
    dict2 = {'c': 3, 'd': 4}

    dict1.update(dict2)  # dict1 изменяется, объединяясь с dict2
    print(dict1)  # Output: {'a': 1, 'b': 2, 'c': 3, 'd': 4}

    # Если есть повторяющиеся ключи, то значения из второго словаря (dict2) перезапишут значения из первого (dict1)
    dict3 = {'a': 5, 'e': 6}
    dict1.update(dict3)
    print(dict1) # Output: {'a': 5, 'b': 2, 'c': 3, 'd': 4, 'e': 6}

    # Важно! Метод update() изменяет словарь, к которому применяется (в данном случае, dict1).  Если вам нужно создать новый словарь, не изменяя исходные, нужно сделать копию:
    dict4 = {'f': 7, 'g': 8}
    dict5 = {'h': 9, 'i': 10}
    new_dict = dict4.copy() # Создаем копию dict4
    new_dict.update(dict5) # Обновляем копию
    print(new_dict) # Output: {'f': 7, 'g': 8, 'h': 9, 'i': 10}
    print(dict4) # Output: {'f': 7, 'g': 8} (dict4 не изменился)

  

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

3. Используя распаковку словаря (**):


    dict1 = {'a': 1, 'b': 2}
    dict2 = {'c': 3, 'd': 4}

    merged_dict = {**dict1, **dict2}
    print(merged_dict)  # Output: {'a': 1, 'b': 2, 'c': 3, 'd': 4}

    # Если есть повторяющиеся ключи, то значения из второго словаря (dict2) перезапишут значения из первого (dict1)
    dict3 = {'a': 5, 'e': 6}
    merged_dict = {**dict1, **dict3}
    print(merged_dict)  # Output: {'a': 5, 'b': 2, 'e': 6}
  

Этот способ создает новый словарь, объединяя элементы из обоих словарей. Он более читаемый, чем update(), если вам нужно создать новый словарь, а не изменять существующий.

Какой способ выбрать?

  • Python 3.9+: Используйте оператор |. Это самый лаконичный и предпочтительный вариант.
  • Python 3.5+: Используйте распаковку словаря (**), если вам нужно создать новый словарь.
  • Для любого Python 3: Используйте update(), если вам нужно изменить существующий словарь, и не забудьте создать копию, если хотите избежать изменения исходного словаря.

Важно помнить: Все эти методы работают с Python 3. Для Python 2 нужно использовать другие подходы, например, метод dict.copy() в сочетании с dict.update().

0