J'ai été un grand fan d'un filtre avec lambda. Cependant, ce n'est pas la meilleure option si l'on considère la complexité temporelle.
Première option
sorted_list = sorted(list_to_sort, key= lambda x: x['name'])
# Returns list of values
Deuxième option
list_to_sort.sort(key=operator.itemgetter('name'))
# Edits the list, and does not return a new list
Comparaison rapide des temps d'exécution
# First option
python3.6 -m timeit -s "list_to_sort = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}, {'name':'Faaa', 'age':57}, {'name':'Errr', 'age':20}]" -s "sorted_l=[]" "sorted_l = sorted(list_to_sort, key=lambda e: e['name'])"
1000000 boucles, meilleur de 3 : 0.736 µsec par boucle
# Second option
python3.6 -m timeit -s "list_to_sort = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}, {'name':'Faaa', 'age':57}, {'name':'Errr', 'age':20}]" -s "sorted_l=[]" -s "import operator" "list_to_sort.sort(key=operator.itemgetter('name'))"
1000000 boucles, meilleur de 3 : 0.438 µsec par boucle
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.