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

不言
Libérer: 2018-10-22 17:21:57
avant
2584 Les gens l'ont consulté
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)
Copier après la connexion

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

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

Résultat :

{'name': 'miaomiao', 'age': 28, 'uid': '160'}
{'name': 'miaomiao2', 'age': 28, 'uid': '150'}
Copier après la connexion

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!

É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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!