Engadindo elementos a un dicionario e unindo a dicionarios en Python

Negocios

Esta sección explica como engadir novos elementos a un dicionario (obxecto tipo dict) ou actualizar o valor dun elemento existente en Python. Tamén é posible concatenar (unir, combinar) varios dicionarios.

  • Engade e actualiza elementos ao dicionario especificando claves.
  • Concatenación (fusión) de varios dicionarios: update (), | operador, | = operador
  • Engade ou actualiza varios elementos: update (), | = operador

Engade e actualiza elementos ao dicionario especificando claves.

Podes engadir / actualizar elementos do dicionario do seguinte xeito.

Obxecto de dicionario [clave] = valor

Cando se especifica unha clave inexistente, engádese un novo elemento e cando se especifica unha clave existente, actualízase o valor existente (sobreescribido).

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 non desexa actualizar o valor dunha clave que existe, use o método setdefault ().

Concatenar (combinar) varios dicionarios: update (), | operador, | = operador

update()

Se se especifica outro obxecto de dicionario como argumento para o método update () do obxecto de dicionario, engadiranse todos os seus elementos.

Se a clave se solapa cunha clave existente, sobrescribirase co valor do dicionario 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}

É un erro especificar varios dicionarios 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 se explica máis adiante, update () pode engadir novos elementos como argumentos de palabras clave (clave = valor), polo que só tes que engadir ** ao dicionario e expandir cada elemento como argumento de palabra clave e pasalo.

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

Como nos exemplos anteriores, usando update () actualizarase o obxecto de dicionario orixinal.

Se desexa xerar un novo dicionario combinando varios dicionarios, use {** d1, ** d2} (de Python 3.5) ou dict (** d1, ** d2).

En Python 3.9 e posteriores, tamén é posible crear un novo dicionario usando o | operador descrito a continuación.

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

Dende Python 3.9, é posible combinar dous dicionarios usando o | operador. Cando dous dicionarios teñen a mesma clave, o valor da dereita ten 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}

| Tamén é posible combinar varios dicionarios empregando unha serie 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}

+ Do mesmo xeito que con update (), o obxecto do lado esquerdo actualízase.

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

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

Engade ou actualiza varios elementos: update (), | = operador

update()

Cando se especifica o argumento clave = valor no método update (), engadirase a clave e o valor. Se a clave se solapa cunha clave existente, sobrescribirase co 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}

Tamén é posible especificar unha lista de (clave, valor) como argumento para o método update (). Se a clave se solapa cunha clave existente, sobrescribirase co 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}

En combinación coa función zip (), pódense engadir elementos desde unha lista de teclas e unha 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 posterior)

Co operador | = pódese especificar unha lista de (clave, valor) no lado dereito.

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

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

Teña en conta que especificar unha lista co | o operador producirá un erro. Só se admiten as operacións de dicionario a dicionario.

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