Maison >développement back-end >Tutoriel Python >Comment Python utilise itertools.groupby() pour regrouper les enregistrements en fonction des champs

Comment Python utilise itertools.groupby() pour regrouper les enregistrements en fonction des champs

不言
不言avant
2018-10-22 17:17:592720parcourir
Le contenu de cet article explique comment Python utilise itertools.groupby() pour regrouper les enregistrements en fonction des champs. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer