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.

Agregando una lista como valor de diccionario

Si tengo una lista de listas, por ejemplo

l=[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]

y un diccionario cuyo valor es de tipo diccionario, por ejemplo

d={"id1":{"A": "", "C": "", "G": "", "T": ""},"id2":{"A":"","C":"","G":"","T":""},
"id3":{"A": "", "C": "", "G": "", "T": ""},"id4":{"A": "", "C": "", "G": "", "T": ""}}

Quiero recorrer la lista y asignar cada elemento a la clave correspondiente en d, la salida sería algo como

d={"id1":{"A": "1", "C": "2", "G": "3", "T": "4"},"id2":{"A":"5","C":"6","G":"7","T":"8"},
"id3":{"A": "9", "C": "10", "G": "11", "T": "12"},"id4":{"A": "13", "C": "14", "G": "15", "T": "16"}}

Pero en su lugar obtengo lo siguiente:

{'id1': {'A': 15, 'C': 15, 'G': 15, 'T': 15}, 'id2': {'A': 15, 'C': 15, 'G': 15, 'T': 15}, 'id3': {'A': 15, 'C': 15, 'G': 15, 'T': 15}, 'id4': {'A': 15, 'C': 15, 'G': 15, 'T': 15}}

Mi código hasta ahora:

for k,v in d.items():
    for sub_k,sub_value in v.items():
        for i in range(len(l)):
            for j in range(len(l[i])):
                d[k][sub_k]=l[i][j]
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema con el código es que está iterando a través de la lista completa para cada par clave-valor en el diccionario, por lo que cada clave en el diccionario termina con el último valor que se le asignó.

    Para solucionarlo, solo necesitas usar el índice una vez para acceder a los valores correspondientes en la lista de listas. Aquí está el código corregido:

    for i, k in enumerate(d):
        for sub_k in d[k]:
            d[k][sub_k] = l[i][list(d[k].keys()).index(sub_k)]
    

    Este código itera a través de las claves en el diccionario, y para cada clave itera a través de las subclaves, luego asigna el valor del índice correspondiente en la sublista. Ten en cuenta que usamos enumerate para obtener tanto el índice como la clave en el mismo bucle. Además, necesitamos obtener el índice de la subclave en la lista de subclaves para acceder al valor correspondiente en la sublista.

Comments are closed.