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.

    Subir

    Te has suscrito correctamente al boletín

    Se produjo un error al intentar enviar tu solicitud. Inténtalo de nuevo.

    Mi Diario Python will use the information you provide on this form to be in touch with you and to provide updates and marketing.