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.
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 endict_list
, se actualiza el valor de esa clave enfinal_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:Este código verifica si cada clave en
dict_list
ya está presente enfinal_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 enfinal_dict
.