Si vous n'avez pas besoin de l'original list
de dictionaries
vous pouvez le modifier en place avec sort()
en utilisant une fonction de touche personnalisée.
Fonction clé :
def get_name(d):
""" Return the value of a key in a dictionary. """
return d["name"]
El list
à trier :
data_one = [{'name': 'Homer', 'age': 39}, {'name': 'Bart', 'age': 10}]
Le trier sur place :
data_one.sort(key=get_name)
Si vous avez besoin de l'original list
appelez le sorted()
en lui passant la fonction list
et la fonction clé, puis affecter le tri retourné list
à une nouvelle variable :
data_two = [{'name': 'Homer', 'age': 39}, {'name': 'Bart', 'age': 10}]
new_data = sorted(data_two, key=get_name)
Impression data_one
y new_data
.
>>> print(data_one)
[{'name': 'Bart', 'age': 10}, {'name': 'Homer', 'age': 39}]
>>> print(new_data)
[{'name': 'Bart', 'age': 10}, {'name': 'Homer', 'age': 39}]
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.