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.

1. Operating System: – Windows 10 – macOS Mojave – Ubuntu 18.04 Sistema Operativo: – Windows 10 – macOS Mojave – Ubuntu 18.04 2. Programming Languages: – Java – Python – JavaScript Lenguajes de programación: – Java – Python – JavaScript 3. Database Management Systems: – Oracle – MySQL – MongoDB Sistemas de Gestión de Bases de Datos: – Oracle – MySQL – MongoDB

Hay una lista de cadenas que necesito usar para crear un diccionario anidado con algunos valores ['C/A', 'C/B/A', 'C/B/B']

La salida será en el formato {'C': {'A': [1, 2, 3], 'B': {'A': [1, 2, 3], 'B': [1, 2, 3]}}}

He intentado usar el siguiente código para crear el diccionario anidado y actualizar el valor, pero en su lugar obtengo {'C': {'A': [1, 2, 3], 'C': {'B': {'A': [1, 2, 3], 'C': {'B': {'B': [1, 2, 3]}}}}}} como salida, que no es el formato correcto. Todavía estoy tratando de encontrar una solución. ¿Alguna idea?

s = ['C/A', 'C/B/A', 'C/B/B']
new = current = dict()
for each in s:
    lst = each.split('/')
    for i in range(len(lst)):
        current[lst[i]] = dict()
        if i != len(lst)-1:
            current = current[lst[i]]
        else:
            current[lst[i]] = [1,2,3]

print(new)
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Se puede modificar el código dado para crear adecuadamente un diccionario anidado con la salida deseada. El problema con el código actual es que crea un nuevo diccionario cada vez que se encuentra una clave, lo que produce una salida incorrecta. En su lugar, se puede verificar si la clave existen en el diccionario actual y crear un nuevo diccionario o actualizar el existente.

    Aquí hay una versión modificada del código que debería darle la salida deseada:

    s = ['C/A', 'C/B/A', 'C/B/B']
    new = {}
    for each in s:
        lst = each.split('/')
        current = new
        for i in range(len(lst)):
            if lst[i] not in current:
                # crear un nuevo diccionario o actualizar el existente
                if i == len(lst)-1:
                    current[lst[i]] = [1, 2, 3]
                else:
                    current[lst[i]] = {}
            current = current[lst[i]]
    print(new)
    

    Este código primero inicializa un diccionario vacío new, luego itera sobre cada cadena en la lista s. Para cada cadena, la divide en una lista de claves usando el separador '/', e inicializa una variable de diccionario current para apuntar al diccionario de nivel superior new.

    En el bucle interno, para cada clave en la lista de claves, el código verifica si la clave ya existe en el diccionario current. Si no existe, el código crea un nuevo diccionario o actualiza el existente dependiendo de si es la última clave en la lista o no. Finalmente, la variable current se actualiza para apuntar al nuevo diccionario creado o actualizado.

    Al final del bucle, el diccionario resultante new debe contener el diccionario anidado deseado con el formato correcto:

    {'C': {'A': [1, 2, 3], 'B': {'A': [1, 2, 3], 'B': [1, 2, 3]}}}
    

Comments are closed.