84 votes

comment convertir une liste de dict en dict

Comment convertir une liste de dict en dict. Ci-dessous la liste des dict

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

à

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

110voto

joaquin Points 22450

Une solution possible en utilisant des noms comme nouvelles clés :

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

Avec python 3.x, vous pouvez également utiliser les compréhensions dict pour la même approche d'une manière plus agréable :

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

Comme suggéré dans un commentaire de Paul McGuire, si vous ne voulez pas le nom dans le dict interne, vous pouvez faire :

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

55voto

Vlad Bezden Points 5024

Avec python 3.3 et au-dessus, vous pouvez utiliser ChainMap

Un ChainMap regroupe plusieurs dicts ou autres mappages pour créer une vue unique et actualisable. Si aucune carte n'est spécifiée, une seule carte vide dictionnaire est fourni de sorte qu'une nouvelle chaîne a toujours au moins un cartographie.

 from collections import ChainMap

data = dict(ChainMap(*data))

41voto

phynfo Points 1893

Si les dicts ne partagent pas la clé, vous pouvez utiliser :

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

Il est probablement préférable dans votre cas de générer un dict avec des listes comme valeurs ?

 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)

Cela donne :

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

16voto

ANK Points 102

La meilleure approche serait dict((clé, val) pour k dans les données pour la clé, val dans k.items())

6voto

MrFrosty Points 74

Ne compliquons pas trop cela :

 simple_dictionary = dict(data[0])

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X