C贸mo fusionar dos diccionarios en Python

    Introducci贸n

    No es raro tener dos diccionarios en Python que le gustar铆a combinar. En este art铆culo, veremos varias formas de fusionar dos diccionarios en Python.

    Algunas soluciones no est谩n disponibles para todas las versiones de Python, por lo que tambi茅n examinaremos formas de fusionar las versiones seleccionadas.

    Al fusionar diccionarios, debemos considerar lo que suceder谩 cuando los dos diccionarios tengan las mismas claves. Primero definamos lo que deber铆a suceder cuando nos fusionamos.

    Fusionar diccionarios en Python

    Las fusiones suelen ocurrir de derecha a izquierda, como dict_a <- dict_b. Cuando hay un titular de clave com煤n en ambos diccionarios, el valor del segundo diccionario sobrescribe el valor del primer diccionario.

    Esto se puede demostrar en la ilustraci贸n que se muestra a continuaci贸n, donde los componentes del diccionario B se fusionan con A, y el traje verde del diccionario B ocupa el lugar del traje naranja:

    A lo largo de este art铆culo, utilizaremos los siguientes diccionarios.

    • Diccionarios con valores:
    >>> a = {1:'peanut', 2:'butter', 3:'jelly', 4:'time'}
    >>> b = {1:'fish', 2:'chips'}
    
    • Diccionarios con valores anidados:
    >>> c = {1: ['peanut','butter','jelly','time'], 2:['fish','chips']}
    >>> d = {1: ['fish','chips'], 2:['peanut','butter','jelly','time']}
    

    Python 3.9 y superior

    Desde la versi贸n 3.9 de Python en adelante, podemos usar los operadores de combinaci贸n (representados por | ) para combinar dos diccionarios:

    >>> x = a | b
    >>> print(x)
    {1: 'fish', 2: 'chips', 3: 'jelly', 4: 'time'}
    

    Los operadores de combinaci贸n de diccionario tambi茅n se pueden utilizar en lugar de diccionarios anidados. Aqu铆 tiene lugar la sobrescritura completa del valor de la clave coincidente:

    >>> y = c | d
    >>> print(y)
    {1: ['fish', 'chips'], 2: ['peanut', 'butter', 'jelly', 'time']}
    

    Python 3 y superior

    Para versiones anteriores de Python 3, lamentablemente no podemos usar los operadores de combinaci贸n. En su lugar, podemos fusionar desempaquetando ambos diccionarios, usando el ** asteriscos dobles, dentro de otro diccionario como se muestra a continuaci贸n:

    >>> x = {**a, **b}
    >>> print(x)
    {1: 'fish', 2: 'chips', 3: 'jelly', 4: 'time'}
    

    Lo mismo se aplica a los diccionarios con valores de lista anidados. Los valores de las claves superpuestas se sobrescribir谩n de la siguiente manera:

    >>> y = {**c, **d}
    >>> print(y)
    {1: ['fish', 'chips'], 2: ['peanut', 'butter', 'jelly', 'time']}
    

    Python 2 y superior

    En las versiones heredadas de Python, los fragmentos anteriores no funcionar谩n. En cambio, la combinaci贸n se puede facilitar combinando los elementos del diccionario, o dict_items de ambas variables.

    Tambi茅n podemos utilizar el copy() y update() m茅todos de diccionario. Por 煤ltimo, podemos recorrer los elementos de un diccionario y usar el extend() m茅todo para agregarlo a otro diccionario.

    Usando elementos ()

    Comencemos por combinar con items():

    >>> x = dict(a.items() + b.items())
    >>> print(x)
    {1: 'fish', 2: 'chips', 3: 'jelly', 4: 'time'}
    

    La sintaxis anterior es v谩lida para valores simples. Para un diccionario anidado que contiene valores de lista, el items() la llamada debe enviarse a un list() y luego combinado:

    >>> y = dict(list(c.items()) + list(d.items()))
    >>> print(y)
    {1: ['fish', 'chips'], 2: ['peanut', 'butter', 'jelly', 'time']}
    

    Esta soluci贸n funciona bien porque las claves eran num茅ricas, se conservaron las claves originales. Para claves de diferentes tipos, preferir铆a la siguiente opci贸n.

    Usando la actualizaci贸n del diccionario ()

    Otra forma de realizar la combinaci贸n es copiar uno de los diccionarios y actualizarlo con el otro como se muestra a continuaci贸n:

    >>> x = a.copy()
    >>> x.update(b)
    >>> print (x)
    {1: 'fish', 2: 'chips', 3: 'jelly', 4: 'time'}
    

    Agregar valores de lista en todas las versiones de Python

    En las secciones anteriores, hemos sobrescrito los valores anidados de los diccionarios combinados. Hay casos en los que los valores anidados deben agregarse en lugar de sobrescribirse.

    Esto se puede hacer usando el extend() m茅todo como se muestra a continuaci贸n:

    >>> for k, v in d.items():
    ...    if k in c:
    ...        c[k].extend(v)
    ...    else:
    ...       c[k] = v
    >>>
    >>> print(c)
    {1: ['peanut', 'butter', 'jelly', 'time', 'fish', 'chips'], 2: ['fish', 'chips', 'peanut', 'butter', 'jelly']}
    

    Conclusi贸n

    En este art铆culo, hemos aprendido c贸mo funcionan las combinaciones de diccionarios y c贸mo podemos combinar dos diccionarios en diferentes versiones de Python. Combinar diccionarios puede ser bastante 煤til en situaciones como leer varios archivos JSON, crear un mapa de objetos o incluso crear 铆ndices de contenido.

     

    Etiquetas:

    Deja una respuesta

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