1. Exigences
Il existe une série de dictionnaires ou d'instances d'objets, et nous souhaitons regrouper et itérer les données selon un champ spécifique.
2. Solution
La fonction itertools.groupby() est particulièrement utile lors du regroupement de données.
Exemple :
from operator import itemgetter from itertools import groupby rows=[ {'name':'mark','age':18,'uid':'110'}, {'name':'miaomiao','age':28,'uid':'160'}, {'name':'miaomiao2','age':28,'uid':'150'}, {'name':'xiaohei','age':38,'uid':'130'}, ] #首先根据age排序 rows.sort(key=itemgetter('age')) for age,items in groupby(rows,key=itemgetter('age')): print(age) for i in items: print(i)
Résultat :
18 {'name': 'mark', 'age': 18, 'uid': '110'} 28 {'name': 'miaomiao', 'age': 28, 'uid': '160'} {'name': 'miaomiao2', 'age': 28, 'uid': '150'} 38 {'name': 'xiaohei', 'age': 38, 'uid': '130'}
Analyse
Python implémente plusieurs clés à une clé. dictionnaire de valeurs La fonction d'implémentation de la méthode
groupby() analyse la séquence pour trouver les éléments de séquence avec la même valeur (ou la valeur renvoyée par la fonction spécifiée par la clé de paramètre) et les regroupe. groupby() crée un itérateur et chaque itération renvoie une valeur et un sub_iterator. Cet itérateur peut produire tous les éléments avec cette valeur dans le groupe.
Ce qui est important ici, c'est de trier d'abord les données en fonction de l'âge. Parce que groupby() ne trie pas.
Si vous regroupez simplement les données par date dans une grande structure de données pour permettre un accès aléatoire, il serait peut-être préférable de créer un dictionnaire multi-valeurs à une clé en utilisant defaultdict() :
from collections import defaultdict rows=[ {'name':'mark','age':18,'uid':'110'}, {'name':'miaomiao','age':28,'uid':'160'}, {'name':'miaomiao2','age':28,'uid':'150'}, {'name':'xiaohei','age':38,'uid':'130'}, ] rows_by_age=defaultdict(list) for row in rows: rows_by_age[row['age']].append(row) for a in rows_by_age[28]: print(a)
Résultat :
{'name': 'miaomiao', 'age': 28, 'uid': '160'} {'name': 'miaomiao2', 'age': 28, 'uid': '150'}
Si le tri n'est pas pris en compte, la méthode defaultdict est généralement plus rapide que groupby.
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!