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.
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'}]
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'}]
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!