profunda fusión de diccionarios de diccionarios en python
fusionar múltiples diccionarios con claves anidadas puede ser una tarea desafiante. Consideremos el siguiente ejemplo:
dict1 = { 1: {"a": {"A"}}, 2: {"b": {"B"}} } dict2 = { 2: {"c": {"C"}}, 3: {"d": {"D"}} }
La salida deseada es:
dict3 = { 1: {"a": {"A"}}, 2: {"b": {"B"}, "c": {"C"}}, 3: {"d": {"D"}} }
Para lograr esta fusión profunda, podemos utilizar una función recursiva:
def merge(a: dict, b: dict, path=[]): for key in b: if key in a: if isinstance(a[key], dict) and isinstance(b[key], dict): merge(a[key], b[key], path [str(key)]) else: a[key] = b[key] else: a[key] = b[key] return a
Esta función toma dos diccionarios, A y B, y una ruta que realiza un seguimiento de la ubicación actual en la estructura anidada. Se itera a través de las teclas en B y verifica si la clave correspondiente existe en a. Si los valores en esa clave son ambos diccionarios, llama a la función de fusión de manera recursiva para fusionar esos subdictorios. De lo contrario, actualiza el valor en A con el valor de b.
Para el ejemplo Dicts anterior, la función de fusión produciría el resultado deseado:
print(merge(dict1, dict2))
el resultado sería:
{ 1: {'a': {'A'}}, 2: {'b': {'B'}, 'c': {'C'}}, 3: {'d': {'D'}} }
nota: Esta función muta el primer diccionario, a. Si desea preservar su contenido, puede hacer una copia antes de fusionar, por ejemplo, fusionar (dict (a), b).
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3