es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo combinar dos diccionarios en una lista sin sobrescribir la clave anterior.

Para los diccionarios en una lista, necesito extraerlos y fusionarlos en un solo diccionario sin sobrescribir los valores de clave existentes.

Por ejemplo, tengo:

mylist = [{'b': 3}, {'b': 9, 'A': 8, 'Z': 2, 'V': 1}]

El resultado debería ser:

{'b': 3, 'A': 8, 'Z': 2, 'V': 1}

A continuación está mi código:

def concatenar_dict(dict_list: list) -> dict:
    final_dict = {}
    for d in dict_list:
        for k, v in d.items():
            if k not in final_dict:
                final_dict[k] = v

    return final_dict

mylist = [{'b': 7}, {'b': 10, 'A': 8, 'Z': 2, 'V': 1}]
print(concatenar_dict(mylist))

No entiendo por qué la palabra clave “not in” no saltaría el elemento existente ‘b’: 10 y dejaría ‘b’: 7 sin modificar y continuaría con ‘A’: 8.

Tags:  ,

Answer

  1. Avatar for davy.ai

    La palabra clave not in solo verifica si una clave no está presente en el diccionario final, pero no evita actualizar el valor de una clave existente. En tu código, cada vez que se encuentra una clave en dict_list, se actualiza el valor de esa clave en final_dict, sin importar si ya existe o no.

    Para evitar sobrescribir los valores de las claves existentes, puedes verificar si la clave ya existe en final_dict y solo actualizar el valor si no lo hace. Aquí tienes una versión modificada de tu código:

    def concatenate_dict(dict_list: list) -> dict:
        final_dict = {}
        for d in dict_list:
            for k, v in d.items():
                if k not in final_dict:
                    final_dict[k] = v
        return final_dict
    
    mylist = [{'b': 7}, {'b': 10, 'A': 8, 'Z': 2, 'V': 1}]
    print(concatenate_dict(mylist))     # Salida: {'b': 7, 'A': 8, 'Z': 2, 'V': 1}
    

    Este código verifica si cada clave en dict_list ya está presente en final_dict, y si no lo está, la agrega al diccionario con su valor correspondiente. Si la clave ya existe, se omite y se mantiene el par clave-valor existente en final_dict.

Comments are closed.