2210 votes

Comment puis-je trier une liste de dictionnaires par les valeurs du dictionnaire en Python?

J'ai une liste de dictionnaires et vous voulez que, triées par une valeur de ce dictionnaire.

Cette

[{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]

tri par nom, devrait devenir

[{'name':'Bart', 'age':10}, {'name':'Homer', 'age':39}]

2863voto

Mario Fernandez Points 8974

Il peut sembler nettoyant à l'aide d'une clé au lieu d'un cmp:

newlist = sorted(list_to_be_sorted, key=lambda k: k['name']) 

ou, comme J. F. Sebastian et d'autres ont suggéré,

from operator import itemgetter
newlist = sorted(list_to_be_sorted, key=itemgetter('name')) 

80voto

pjz Points 11925
my_list = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]

my_list.sort(lambda x,y : cmp(x['name'], y['name']))

my_list sera maintenant ce que vous voulez.

57voto

Dologan Points 541

Si vous souhaitez trier la liste par de multiples touches, vous pouvez effectuer les opérations suivantes:

my_list = [{'name':'Homer', 'age':39}, {'name':'Milhouse', 'age':10}, {'name':'Bart', 'age':10} ]
sortedlist = sorted(my_list , key=lambda elem: "%02d %s" % (elem['age'], elem['name']))

Il est plus à du bidouillage, puisqu'il repose sur la conversion des valeurs en une chaîne unique représentation à des fins de comparaison, mais il fonctionne comme prévu pour les nombres, y compris celles qui sont négatives (bien que vous aurez besoin de formater votre texte de façon appropriée avec zéro paddings si vous utilisez des numéros)

31voto

efotinis Points 6338
import operator
a_list_of_dicts.sort(key=operator.itemgetter('name'))

la "clef" est utilisée pour le tri par une valeur arbitraire et "itemgetter' définit la valeur de chaque élément, l'attribut "name".

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