Acrescentar elementos a um dicionário e juntar dicionários em Python

O negócio

Esta secção explica como adicionar novos elementos a um dicionário (objecto do tipo dict) ou actualizar o valor de um elemento existente em Python. É também possível concatenar (juntar, fundir) vários dicionários.

  • Adicionar e actualizar elementos ao dicionário, especificando chaves.
  • Concatenação (fusão) de múltiplos dicionários:update(),| operador,|= operador
  • Adicionar ou actualizar múltiplos elementos:update(),|= operador

Adicionar e actualizar elementos ao dicionário, especificando chaves.

Pode acrescentar elementos de dicionário da seguinte forma.

Objecto de dicionário [chave] = valor

Quando uma chave inexistente é especificada, um novo elemento é adicionado, e quando uma chave existente é especificada, o valor existente é actualizado (sobrescrito).

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}

Se não quiser actualizar o valor de uma chave que existe, utilize o método setdefault().

Concatenar (fundir) dicionários múltiplos: update(), | operador, |= operador

actualização()

Se outro objecto do dicionário for especificado como argumento para a actualização do método do objecto do dicionário(), todos os seus elementos serão adicionados.

Se a chave se sobrepuser a uma chave existente, será sobregravada com o valor do dicionário especificado no argumento.

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}

É um erro especificar vários dicionários no argumento 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

Como explicado mais tarde, update() pode adicionar novos elementos como argumentos de palavras-chave (key=valor), por isso basta adicionar ** ao dicionário e expandir cada elemento como um argumento de palavra-chave e passá-lo.

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

Como nos exemplos anteriores, utilizando update() irá actualizar o objecto original do dicionário.

Se quiser gerar um novo dicionário fundindo vários dicionários, utilize {**d1, **d2}. (de Python 3.5) ou dict(**d1, **d2).

Em Python 3.9 e posteriores, é também possível criar um novo dicionário utilizando o| operador descrito a seguir.

| operador, |= operador (Python 3.9 e posteriores)

Desde Python 3.9, é possível fundir dois dicionários utilizando o | operador. Quando dois dicionários têm a mesma chave, o valor à direita tem prioridade.

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}

| Também é possível combinar vários dicionários utilizando uma série de operadores.

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}

+Como com update(), o objecto do lado esquerdo é actualizado.

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

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

Adicionar ou actualizar múltiplos elementos: update(), |= operador

actualização()

Quando a palavra-chave argumento key=valor é especificada no método update(), a chave e o valor da chave serão adicionados. Se a chave se sobrepuser a uma chave existente, ela será sobregravada com o valor especificado no argumento.

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

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

É também possível especificar uma lista de (chave, valor) como argumento para o método update(). Se a chave se sobrepuser a uma chave existente, será sobregravada com o valor especificado como argumento.

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

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

Em combinação com a função zip(), podem ser adicionados elementos de uma lista de chaves e de uma lista de valores.

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}

|= operador (Python 3.9 e posteriores)

Com o operador |=, uma lista de (chave, valor) pode ser especificada no lado direito.

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

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

Note-se que especificar uma lista com o | operador resultará num erro. Só são suportadas operações de dicionário a dicionário.

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