Добавление элементов в словарь и присоединение словарей на Python

Бизнес

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

  • Добавление и обновление элементов в словарь путем указания ключей.
  • Концентрация (объединение) нескольких словарей:update(),| оператор,|= оператор
  • Добавить или обновить несколько элементов:update(),|= оператор

Добавление и обновление элементов в словарь путем указания ключей.

Элементы словаря add\update можно посмотреть следующим образом.

Объект словаря [ключ] = значение

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

d = {'k1': 1, 'k2': 2}

d['k3'] = 3
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3}

d['k1'] = 100
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3}

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

Сконцентрировать (объединить) несколько словарей: update(), оператор |, оператор |=.

обновление()

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

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

d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}

d1.update(d2)
print(d1)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

Ошибкой является указание нескольких словарей в аргументе update().

d1 = {'k1': 1, 'k2': 2}
d2 = {'k3': 3, 'k4': 4}
d3 = {'k5': 5, 'k6': 6}

# d1.update(d2, d3)
# TypeError: update expected at most 1 arguments, got 2

Как объяснялось позже, функция update() может добавлять новые элементы в качестве аргументов по ключевым словам (key=value), поэтому просто добавьте ** в словарь, разверните каждый элемент в качестве аргумента по ключевым словам и передайте его.

d1.update(**d2, **d3)
print(d1)
# {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4, 'k5': 5, 'k6': 6}

Как и в предыдущих примерах, с помощью функции update() будет обновлен оригинальный объект словаря.

Если вы хотите сгенерировать новый словарь, объединив несколько словарей, используйте {**d1, **d2}. (с Python 3.5) или dict(**d1, **d2).

На Python 3.9 и более поздних версиях можно также создать новый словарь, используя оператор the|, описанный ниже.

| оператор, |= оператор (Python 3.9 и более поздние).

Начиная с версии Python 3.9, возможно объединение двух словарей с помощью оператора |. Когда два словаря имеют один и тот же ключ, значение справа имеет приоритет.

d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}

print(d1 | d2)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

print(d2 | d1)
# {'k1': 1, 'k3': 3, 'k4': 4, 'k2': 2}

|It также можно комбинировать несколько словарей, используя ряд операторов.

d1 = {'k1': 1, 'k2': 2}
d2 = {'k3': 3, 'k4': 4}
d3 = {'k5': 5, 'k6': 6}

print(d1 | d2 | d3)
# {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4, 'k5': 5, 'k6': 6}

+As с функцией update(), объект слева обновляется.

d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}

d1 |= d2
print(d1)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

Добавить или обновить несколько элементов: update(), |= оператор

обновление()

При указании в методе update() аргумента keyword key=value будет добавлен ключ и значение value. Если ключ перекрывается с существующим ключом, он будет перезаписан значением, указанным в аргументе.

d = {'k1': 1, 'k2': 2}

d.update(k1=100, k3=3, k4=4)
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

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

d = {'k1': 1, 'k2': 2}

d.update([('k1', 100), ('k3', 3), ('k4', 4)])
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

В сочетании с функцией zip(), элементы могут быть добавлены из списка ключей и списка значений.

d = {'k1': 1, 'k2': 2}

keys = ['k1', 'k3', 'k4']
values = [100, 3, 4]

d.update(zip(keys, values))
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

|= оператор (Python 3.9 и более поздние).

С помощью оператора |= справа можно указать список (ключ, значение).

d = {'k1': 1, 'k2': 2}

d |= [('k1', 100), ('k3', 3), ('k4', 4)]
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

Обратите внимание, что указание списка с оператором | приведет к ошибке. Поддерживаются только операции со словарем.

# print(d | [('k1', 100), ('k3', 3), ('k4', 4)])
# TypeError: unsupported operand type(s) for |: 'dict' and 'list'