Añadir elementos a un diccionario y unir diccionarios en Python

Negocio

Esta sección explica cómo añadir nuevos elementos a un diccionario (objeto de tipo dict) o actualizar el valor de un elemento existente en Python. También es posible concatenar (unir, fusionar) múltiples diccionarios.

  • Añade y actualiza elementos al diccionario especificando claves.
  • Concatenación (fusión) de varios diccionarios:update(),| operador,|= operador
  • Añadir o actualizar múltiples elementos:update(),|= operador

Añade y actualiza elementos al diccionario especificando claves.

Puede añadir elementos del diccionario de actualización de la siguiente manera.

Objeto de diccionario [clave] = valor

Cuando se especifica una clave inexistente, se añade un nuevo elemento, y cuando se especifica una clave existente, se actualiza el valor existente (se sobrescribe).

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}

Si no quiere actualizar el valor de una clave que existe, utilice el método setdefault().

Concatenar (fusionar) varios diccionarios: update(), operador |, operador |=

actualizar()

Si se especifica otro objeto diccionario como argumento del método update() del objeto diccionario, se añadirán todos sus elementos.

Si la clave se solapa con una clave existente, se sobrescribirá con el valor del diccionario especificado en el 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}

Es un error especificar varios diccionarios en el argumento de 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 explicará más adelante, update() puede añadir nuevos elementos como argumentos de palabra clave (key=value), así que sólo hay que añadir ** al diccionario y expandir cada elemento como un argumento de palabra clave y pasarlo.

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

Como en los ejemplos anteriores, el uso de update() actualizará el objeto diccionario original.

Si quieres generar un nuevo diccionario fusionando varios diccionarios, utiliza {**d1, **d2} (desde Python 3.5) o dict(**d1, **d2).

En Python 3.9 y posteriores, también es posible crear un nuevo diccionario utilizando el operador| que se describe a continuación.

Operador |, operador |= (Python 3.9 y posteriores)

Desde Python 3.9, es posible fusionar dos diccionarios utilizando el operador |. Cuando dos diccionarios tienen la misma clave, el valor de la derecha tiene prioridad.

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}

|También es posible combinar varios diccionarios utilizando una 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}

+Al igual que con update(), se actualiza el objeto de la izquierda.

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

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

Añadir o actualizar múltiples elementos: update(), operador |=

actualizar()

Cuando se especifica el argumento clave key=value en el método update(), se añadirá la clave key y el valor value. Si la clave se solapa con una clave existente, se sobrescribirá con el valor especificado en el argumento.

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

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

También es posible especificar una lista de (clave, valor) como argumento del método update(). Si la clave se solapa con una clave existente, se sobrescribirá con el 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 con la función zip(), se pueden añadir elementos a partir de una lista de claves y una 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 y posteriores)

Con el operador |= se puede especificar una lista de (clave, valor) en el lado derecho.

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

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

Tenga en cuenta que especificar una lista con el operador | dará lugar a un error. Sólo se admiten operaciones de diccionario a diccionario.

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