Soy nuevo en el aprendizaje de Python y tengo problemas para analizar mi lista de lista en una lista de diccionario, puedo combinar solo la lista individual en un diccionario, pero no puedo hacerlo para la lista de listas. Básicamente tengo los siguientes datos:

mylist = [[john, type A, 40], [Barbara, type O, 22]]

He hecho def función para mapear la lista en mi clave de diccionario, pero solo para la lista individual:

dict_key = {'name': John, 'blood type': type O, 'Barbara': 8600}

Lo que estoy tratando de hacer es iterar todos los registros en mylist y analizar cada lista y convertirla en una lista de diccionario. Entonces, el resultado final se vería así:

list_dict = [{'name': John, 'blood type': type O, 'age': 40}, {'name': Barbara, 'blood type': type O, 'age': 22}]

Cualquier ayuda sería muy apreciada, ¡hemos estado atrapados en esto durante tanto tiempo! Gracias.

0
Esar 1 dic. 2020 a las 19:15

3 respuestas

La mejor respuesta
In [85]: mylist = [['john', 'type A', 40], ['Barbara', 'type O', 22]]                                                                                                                                                                                                         

In [86]: headers = ['name', 'blood type', 'age']                                                                                                                                                                                                                              

In [87]: answer = []                                                                                                                                                                                                                                                          

In [88]: for record in mylist: 
    ...:     d = {} 
    ...:     for header,value in zip(headers, record): 
    ...:         d[header] = value 
    ...:     answer.append(d) 
    ...:                                                                                                                                                                                                                                                                      

In [89]: answer                                                                                                                                                                                                                                                               
Out[89]: 
[{'name': 'john', 'blood type': 'type A', 'age': 40},
 {'name': 'Barbara', 'blood type': 'type O', 'age': 22}]

Por supuesto, hay una sola línea para esto:

In [90]: [dict(zip(headers, record)) for record in mylist]                                                                                                                                                                                                                    
Out[90]: 
[{'name': 'john', 'blood type': 'type A', 'age': 40},
 {'name': 'Barbara', 'blood type': 'type O', 'age': 22}]
0
inspectorG4dget 1 dic. 2020 a las 16:19

Probemos la comprensión de listas y dictados internos:

list_dict = [{x:y for x,y in zip(r,['name', 'blood type', 'age'])} for r in mylist]
0
Wasif Hasan 1 dic. 2020 a las 16:21
mylist = [['john', 'type A', 40],['Barbara', 'type O', 22]]
keys=['name','blood type','age']
lst=[]
for i in mylist:
    d={}
    for n in range(3):
        d[keys[n]] = i[n]
    lst.append(d)
print(lst)
0
Shadowcoder 1 dic. 2020 a las 16:24