Concatenar diccionarios en python

Una entrada cortita pero de mucha utilidad. Quiero compartir con ustedes como unir (concatenar) 2 diccionarios en python.

Concatenar diccionarios en python

Existen varias formas en que los diccionarios se pueden fusionar mediante el uso de varias funciones y constructores en Python. En este artículo, discutiremos algunas formas de combinar diccionarios.

Índice

Usando el método update()

Para unir 2 diccionarios en python (un diccionario dentro del otro) vamos a utilizar el método update(), que es el equivalente a la función extend() que nos sirve para concatenar listas.

Vamos a poner un ejemplo:

Utilizaremos el shell interactivo de python:

»»» dicc_1 = {1: "a" , 2: "b" , 3: "c"}
»»» dicc_2 = {4: "d" , 5: "e" , 6: "f"}
»»» dicc_1
{1: "a", 2: "b", 3: "c"}
»»» dicc_2
{4: "d", 5: "e" , 6: "f"}

»»» dicc_1.update(dicc_2)
»»» dicc_2
{4: "d", 5: "e" , 6: "f"}
»»» dicc_1
{1: "a" , 2: "b" , 3: "c" , 4: "d", 5: "e" , 6: "f"}
»»»

Otro ejemplo con código:

# Python code to merge dict using update() method
def Merge(dict1, dict2):
    return(dict2.update(dict1))
     
# Driver code
dict1 = {'a': 10, 'b': 8}
dict2 = {'d': 6, 'c': 4}
 
# This return None
print(Merge(dict1, dict2))
 
# changes made in dict2
print(dict2)

Salida:

None
{'c': 4, 'a': 10, 'b': 8, 'd': 6}

Usando ** en Python

Esto generalmente se considera un truco en Python, donde se usa una sola expresión para fusionar dos diccionarios y se almacena en un tercer diccionario. La única expresión es **. Esto no afecta a los otros dos diccionarios. ** implica que un argumento es un diccionario. Usando ** [doble asterísco] es un atajo que le permite pasar múltiples argumentos a una función directamente usando un diccionario. Para obtener más información, consulte **kwargs en Python. Usando esto, primero pasamos todos los elementos del primer diccionario al tercero y luego pasamos el segundo diccionario al tercero. Esto reemplazará las claves duplicadas del primer diccionario.

Ejemplo:

# Python code to merge dict using a single
# expression
def Merge(dict1, dict2):
    res = {**dict1, **dict2}
    return res
     
# Driver code
dict1 = {'a': 10, 'b': 8}
dict2 = {'d': 6, 'c': 4}
dict3 = Merge(dict1, dict2)
print(dict3)

Salida:

{'b': 8, 'a': 10, 'c': 4, 'd': 6}

Usando | en Python 3.9

En la última actualización de python ahora podemos usar “|” operador para fusionar dos diccionarios. Es un método muy conveniente para fusionar diccionarios.

Ejemplo:

# code
# Python code to merge dict using a single 
# expression
def Merge(dict1, dict2):
    res = dict1 | dict2
    return res
       
# Driver code
dict1 = {'x': 10, 'y': 8}
dict2 = {'a': 6, 'b': 4}
dict3 = Merge(dict1, dict2)
print(dict3)

Salida:

{'x': 10, 'a': 6, 'b': 4, 'y': 8}

Cuales son tus trucos para concatenar diccionarios?

  1. Gastón Tognola dice:

    Muy buena info! gracias

    1. PythonDiario dice:

      Gracias Zultano por tu comentario. Saludos

  2. diario dice:

    Yo quería saber, si quiero expresar que se cumplan dos condiciones para que me haga un cálculo, cómo lo pongo?
    Por ejemplo, mientras la altura >400 y la presión <500
    Existe alguna forma de unirlas en una misma línea?
    lunazul91@gmail.com

    Gracias

    1. PythonDiario dice:

      Hola diario. Claro que se puede. Te dejo un Ejemplo:

      altura = 600
      presion = 300

      if altura > 400 and presion < 500:
      ----print "La altura es mayor a 400 y la presion menor a 500"
      else:
      ----print "No se cumple la condicion"

      Con and se tienen que cumplir las 2 condiciones. También se puede usar or para que se cumpla una u otra.

      Saludos

  3. Unknown dice:

    Amigos, tengo esta duda y aun no la puedo resolver:
    Declarando 2 diccionarios:
    dicc_1 = {1: "a" , 2: ['b', 'z'] , 3: "c"}
    dicc_2 = {4: "d" , 5: "e" , 2: ['f', 'x']}
    Quisiera obtener este resultado:
    dicc_3 = {1: "a" , 2: ['b', 'z', 'f', 'x'] , 3: "c", 4: "d" , 5: "e" }
    Alguien tuviera alguna idea de como obtenerlo?
    Muchas Gracias por el apoyo,
    Saludos

    1. Anónimo dice:

      Buenas, lo podría hacer con:
      dicc_1 = {1: "a" , 2: ['b', 'z'] , 3: "c"}
      dicc_2 = {4: "d" , 5: "e" , 2: ['f', 'x']}
      dicc_1[2].extend(dicc_2[2])
      dicc_2[2]= dicc_1[2]
      dicc_1.update(dicc_2)

  4. Unknown dice:

    Que tal añadiendole un nuevo metodo a la clase dict?

    http://repl.it/0E6/1 3:)

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir
White Monkey