Vous pourriez utiliser une fonction de comparaison personnalisée, ou vous pourriez passer dans une fonction qui calcule une clé de tri personnalisée. C'est généralement plus efficace, car la clé n'est calculée qu'une fois par élément, alors que la fonction de comparaison serait appelée plusieurs fois.
Vous pourriez le faire de cette façon :
def mykey(adict): return adict['name']
x = [{'name': 'Homer', 'age': 39}, {'name': 'Bart', 'age':10}]
sorted(x, key=mykey)
Mais la bibliothèque standard contient une routine générique pour obtenir des éléments d'objets arbitraires : itemgetter
. Essayez plutôt ceci :
from operator import itemgetter
x = [{'name': 'Homer', 'age': 39}, {'name': 'Bart', 'age':10}]
sorted(x, key=itemgetter('name'))
6 votes
Lire la réponse et continuer à regarder opérateur.itemgetter . Puis-je trier sur plusieurs valeurs dans le même processus (par exemple nous avons
[{'name':'Bart', 'age':10, 'note':3},{'name':'Homer','age':10,'note':2},{'name':'Vasile','age':20,'note':3}]
Et à utiliser :from operator import itemgetter newlist = sorted(old_list, key=itemgetter(-'note','name')
EDIT : Testé, et ça marche mais je ne sais pas comment faire pour que la note soit DESC et le nom ASC.