Le contenu de cet article concerne le tri des listes de dictionnaires Python par clés publiques (en utilisant la fonction itemgetter). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
1. Exigences
Nous avons une liste de dictionnaires et souhaitons trier la liste en fonction des valeurs dans un ou plusieurs dictionnaires.2. Solution
Il est très simple d'utiliser la fonction itemgetter dans le module opérateur pour trier de telles structures.
Exemple :
from operator import itemgetter rows=[ {'name':'mark','age':18,'uid':'110'}, {'name':'miaomiao','age':28,'uid':'150'}, {'name':'miaomiao','age':8,'uid':'150'}, {'name':'xiaohei','age':38,'uid':'130'}, ] rows_by_name=sorted(rows,key=itemgetter('name')) rows_by_uid=sorted(rows,key=itemgetter('uid')) print(rows_by_name) print(rows_by_uid) #itemgetter还支持多个键 rows_by_name_age=sorted(rows,key=itemgetter('name','age')) print(rows_by_name_age) #itemgetter同样适用min、max print(min(rows,key=itemgetter('uid'))) print(max(rows,key=itemgetter('age')))
Résultat d'exécution :
[{'name': 'mark', 'age': 18, 'uid': '110'}, {'name': 'miaomiao', 'age': 28, 'uid': '150'}, {'name': 'miaomiao', 'age': 8, 'uid': '150'}, {'name': 'xiaohei', 'age': 38, 'uid': '130'}] [{'name': 'mark', 'age': 18, 'uid': '110'}, {'name': 'xiaohei', 'age': 38, 'uid': '130'}, {'name': 'miaomiao', 'age': 28, 'uid': '150'}, {'name': 'miaomiao', 'age': 8, 'uid': '150'}] [{'name': 'mark', 'age': 18, 'uid': '110'}, {'name': 'miaomiao', 'age': 8, 'uid': '150'}, {'name': 'miaomiao', 'age': 28, 'uid': '150'}, {'name': 'xiaohei', 'age': 38, 'uid': '130'}] {'name': 'mark', 'age': 18, 'uid': '110'} {'name': 'xiaohei', 'age': 38, 'uid': '130'}
Discussion
Dans cet exemple, les lignes sont transmises au trié( ), qui accepte une clé de paramètre de mot-clé, qui doit représenter un objet appelable qui accepte un seul élément des lignes en entrée et renvoie une valeur utilisée pour le tri. La fonction itemgetter() crée un tel objet appelable.
Les paramètres acceptés par la fonction Operator.itemgetter() peuvent être utilisés comme marqueurs de requête pour extraire les valeurs requisesdes enregistrements de lignes. Il peut s'agir d'un nom de clé de dictionnaire, d'un élément de liste numérique ou de toute valeur pouvant être transmise à la méthode __getitem__() de l'objet. Si vous transmettez plusieurs balises à itemgetter(), l'appelable qu'il génère renverra un tuple contenant tous les éléments, puis sorted() organisera la sortie en fonction du résultat du tri du tuple. Ceci est très utile si vous souhaitez trier sur plusieurs champs en même temps.
Parfois, une expression lambda est utilisée pour remplacer la fonction de itemgetter(), par exemple :
rows_by_uid=sorted(rows,key=lambda r:r['uid']) rows_by_name_age=sorted(rows,key=lambda r:(r['name','age']))
Cette solution fonctionne généralement correctement. Mais l’utilisation de itemgetter() s’exécute généralement plus rapidement. Par conséquent, si vous devez prendre en compte des problèmes de performances, vous devez utiliser itemgetter().
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!