cómo convertir la lista de dict a dict

Cómo convertir la lista de dict a dict. A continuación se muestra la lista de dict

data = [{'name': 'John Doe', 'age': 37, 'sex': 'M'}, {'name': 'Lisa Simpson', 'age': 17, 'sex': 'F'}, {'name': 'Bill Clinton', 'age': 57, 'sex': 'M'}] 

a

 data = {{'name': 'John Doe', 'age': 37, 'sex': 'M'}, {'name': 'Lisa Simpson', 'age': 17, 'sex': 'F'}, {'name': 'Bill Clinton', 'age': 57, 'sex': 'M'}} 

Una posible solución usando nombres como las nuevas claves:

 new_dict = {} for item in data: name = item['name'] new_dict[name] = item 

Con Python 3.x también puedes usar dict comprensiones para el mismo enfoque de una manera más agradable:

 new_dict = {item['name']:item for item in data} 

Como se sugiere en un comentario de Paul McGuire, si no quieres el nombre en el dictado interno, puedes hacerlo:

 new_dict = {} for item in data: name = item.pop('name') new_dict[name] = item 

Si los dicts no compartirían la clave, entonces podrías usar:

 dict((key,d[key]) for d in data for key in d) 

Probablemente sea mejor en tu caso generar un dict con listas como valores?

 newdict={} for k,v in [(key,d[key]) for d in data for key in d]: if k not in newdict: newdict[k]=[v] else: newdict[k].append(v) 

Esto produce:

 >>> newdict `{'age': [37, 17, 57], 'name': ['John Doe', 'Lisa Simpson', 'Bill Clinton'], 'sex': ['M', 'F', 'M']}` 

Con python 3.3 y superior, puedes usar ChainMap

Un ChainMap agrupa varios dicts u otras asignaciones para crear una vista única y actualizable. Si no se especifican mapas, se proporciona un solo diccionario vacío para que una nueva cadena siempre tenga al menos un mapa.

 from collections import ChainMap data = dict(ChainMap(*data)) 

El mejor enfoque sería dict ((clave, val) para k en datos para clave, val en k.items ())

¿Quizás quieres que el nombre sea la clave? Realmente no especificas, ya que tu segundo ejemplo no es válido y no es realmente significativo.

Tenga en cuenta que mi ejemplo elimina la clave “nombre” del valor, que puede ser deseable (o quizás no).

 data = [{'name': 'John Doe', 'age': 37, 'sex': 'M'}, {'name': 'Lisa Simpson', 'age': 17, 'sex': 'F'}, {'name': 'Bill Clinton', 'age': 57, 'sex': 'M'}] newdata = {} for entry in data: name = entry.pop('name') #remove and return the name field to use as a key newdata[name] = entry print newdata ##{'Bill Clinton': {'age': 57, 'sex': 'M'}, ## 'John Doe': {'age': 37, 'sex': 'M'}, ## 'Lisa Simpson': {'age': 17, 'sex': 'F'}} print newdata['John Doe']['age'] ## 37 
 indice = 1 mlista = [{'uno':1,'dos':2,'tres':3}, {'cuatro':4,'cinco':5,'seis':6}] mndic = {} mndic = dict((mlista.index(d)+indice, d) for d in mlista) print(mndic) #output {1: {'uno': 1, 'dos': 2, 'tres': 3}, 2: {'cuatro': 4, 'cinco': 5, 'seis': 6}} 

También se puede escribir como sigue,

 data = {0: {'name': 'John Doe', 'age': 37, 'sex': 'M'}, 1: {'name': 'Lisa Simpson', 'age': 17, 'sex': 'F'}, 2: {'name': 'Bill Clinton', 'age': 57, 'sex': 'M'}}