Maison > développement back-end > Tutoriel Python > Liste de dictionnaires de tri Python par clé commune (en utilisant la fonction itemgetter)

Liste de dictionnaires de tri Python par clé commune (en utilisant la fonction itemgetter)

不言
Libérer: 2018-10-20 14:48:10
avant
2557 Les gens l'ont consulté

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')))
Copier après la connexion

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'}
Copier après la connexion

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 requises​​des 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']))
Copier après la connexion

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!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal