Heim  >  Artikel  >  Backend-Entwicklung  >  Wie gruppiert man Daten in Python effizient nach einem bestimmten Schlüssel und welche verschiedenen Methoden stehen für diese Aufgabe zur Verfügung?

Wie gruppiert man Daten in Python effizient nach einem bestimmten Schlüssel und welche verschiedenen Methoden stehen für diese Aufgabe zur Verfügung?

Linda Hamilton
Linda HamiltonOriginal
2024-10-27 00:29:02796Durchsuche

How do you efficiently group data in Python based on a specific key, and what are the different methods available for this task?

Python-Gruppierung nach

Daten nach Schlüssel gruppieren

In Python umfasst das Gruppieren von Daten nach einem bestimmten Schlüssel das Organisieren von Elementen basierend auf einem gemeinsamen Attribut. Dies kann durch verschiedene Methoden erreicht werden, die effiziente Lösungen für große Datenmengen bieten. Sehen wir uns an, wie man Daten effektiv gruppiert.

Effiziente Gruppierungstechnik mit defaultdict

Stellen Sie sich ein Szenario vor, in dem wir über eine Reihe von Datenpaaren verfügen und das Ziel darin besteht, diese nach ihrem Typ zu gruppieren. Um dies zu erreichen, können wir die Klasse „collections.defaultdict“ nutzen. Es erstellt ein Wörterbuch, in dem fehlende Schlüssel automatisch mit Standardwerten initialisiert werden, sodass wir Elemente an diese Schlüssel anhängen können.

<code class="python">from collections import defaultdict

input = [
    ('11013331', 'KAT'),
    ('9085267', 'NOT'),
    ('5238761', 'ETH'),
    ('5349618', 'ETH'),
    ('11788544', 'NOT'),
    ('962142', 'ETH'),
    ('7795297', 'ETH'),
    ('7341464', 'ETH'),
    ('9843236', 'KAT'),
    ('5594916', 'ETH'),
    ('1550003', 'ETH'),
]

res = defaultdict(list)
for v, k in input:
    res[k].append(v)

print([{ 'type': k, 'items': v } for k, v in res.items()])</code>

Ausgabe:

[{'items': ['9085267', '11788544'], 'type': 'NOT'}, {'items': ['5238761', '5349618', '962142', '7795297', '7341464', '5594916', '1550003'], 'type': 'ETH'}, {'items': ['11013331', '9843236'], 'type': 'KAT'}]

Gruppierung mit itertools.groupby

Ein anderer Ansatz ist die Verwendung von itertools.groupby. Diese Funktion erfordert, dass die Eingabe vorher sortiert wird. Es generiert Gruppen aufeinanderfolgender Elemente, bei denen die Werte des angegebenen Schlüssels gleich sind.

<code class="python">import itertools
from operator import itemgetter

sorted_input = sorted(input, key=itemgetter(1))
groups = itertools.groupby(sorted_input, key=itemgetter(1))

print([{ 'type': k, 'items': [x[0] for x in v]} for k, v in groups])</code>

Ausgabe:

[{'items': ['5238761', '5349618', '962142', '7795297', '7341464', '5594916', '1550003'], 'type': 'ETH'}, {'items': ['11013331', '9843236'], 'type': 'KAT'}, {'items': ['9085267', '11788544'], 'type': 'NOT'}]

Beibehalten der Einfügereihenfolge in Wörterbüchern

Vorher In Python 3.7 haben Wörterbücher die Einfügereihenfolge nicht beibehalten. Um dieses Problem zu lösen, kann „collections.OrderedDict“ verwendet werden, um die Reihenfolge von Schlüssel-Wert-Paaren beizubehalten.

<code class="python">from collections import OrderedDict

res = OrderedDict()
for v, k in input:
    if k in res:
        res[k].append(v)
    else:
        res[k] = [v]

print([{ 'type': k, 'items': v } for k, v in res.items()])</code>

In Python 3.7 und höher behalten reguläre Wörterbücher jedoch die Einfügereihenfolge bei, sodass OrderedDict nicht erforderlich ist.

Das obige ist der detaillierte Inhalt vonWie gruppiert man Daten in Python effizient nach einem bestimmten Schlüssel und welche verschiedenen Methoden stehen für diese Aufgabe zur Verfügung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn