Heim >Backend-Entwicklung >Python-Tutorial >Wie Python itertools.groupby() verwendet, um Datensätze nach Feldern zu gruppieren

Wie Python itertools.groupby() verwendet, um Datensätze nach Feldern zu gruppieren

不言
不言nach vorne
2018-10-22 17:17:592696Durchsuche
Der Inhalt dieses Artikels handelt davon, wie Python Datensätze nach Feldern gruppiert. Ich hoffe, dass er für Sie hilfreich ist.

1. Anforderungen

Es gibt eine Reihe von Wörterbüchern oder Objektinstanzen, und wir möchten Daten nach einem bestimmten Feld gruppieren und iterieren.

2. Lösung

Die Funktion itertools.groupby() ist besonders nützlich beim Gruppieren von Daten.

Beispiel:

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)

Ergebnis:

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'}

3. Analyse

Python-Implementierung eines Ein-Schlüssel-Mehrwertwörterbuchs

Die Funktion groupby() durchsucht die Sequenz nach Sequenzelementen mit demselben Wert (oder dem Wert, der von der durch den Parameterschlüssel angegebenen Funktion zurückgegeben wird) und gruppiert sie. groupby() erstellt einen Iterator und jede Iteration gibt einen Wert und einen sub_iterator zurück. Dieser Iterator kann alle Elemente mit diesem Wert in der Gruppe erzeugen.

Wichtig ist hier, die Daten zunächst nach Alter zu sortieren. Weil groupby() nicht sortiert.

Wenn Sie die Daten einfach nach Datum in einer großen Datenstruktur gruppieren, um einen wahlfreien Zugriff zu ermöglichen, ist es möglicherweise besser, mit 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)
ein Ein-Schlüssel-Mehrwertwörterbuch zu erstellen

Ergebnis:

{'name': 'miaomiao', 'age': 28, 'uid': '160'}
{'name': 'miaomiao2', 'age': 28, 'uid': '150'}

Wenn die Sortierung nicht berücksichtigt wird, ist die Methode defaultdict im Allgemeinen schneller als groupby.

Das obige ist der detaillierte Inhalt vonWie Python itertools.groupby() verwendet, um Datensätze nach Feldern zu gruppieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen