Heim > Artikel > Backend-Entwicklung > Wie kann ich eine Liste von Paaren in Python effizient nach dem zweiten Element jedes Paares gruppieren und gleichzeitig das erste Element als Liste im gruppierten Ergebnis behalten?
Man kann auf die Notwendigkeit stoßen, einen Satz von Datenpaaren nach dem zweiten Element jedes Paares zu gruppieren und dabei das erste Element als Liste darin beizubehalten das gruppierte Ergebnis. Dies kann in Python mit den folgenden Schritten effizient erreicht werden.
Erstellen Sie ein Wörterbuch mit dem Standarddict aus dem Collections-Modul, wobei der Schlüssel das zweite Element des Paars ist. Anschließend durchlaufen Sie die Eingabeliste und hängen das erste Element an den entsprechenden Schlüsselwert an.
<code class="python">import collections input = [ ('11013331', 'KAT'), ('9085267', 'NOT'), ('5238761', 'ETH'), ('5349618', 'ETH'), ('11788544', 'NOT'), ('962142', 'ETH'), ('7795297', 'ETH'), ('7341464', 'ETH'), ('9843236', 'KAT'), ('5594916', 'ETH'), ('1550003', 'ETH'), ] res = collections.defaultdict(list) for v, k in input: res[k].append(v)</code>
Konvertieren Sie das Wörterbuch mithilfe eines Listenverständnisses in das erwartete JSON-Format:
<code class="python">result = [{'type': k, 'items': v} for k, v in res.items()]</code>
Ein anderer Ansatz beinhaltet die Verwendung von itertools.groupby, erfordert jedoch, dass die Eingabeliste nach dem zweiten Element sortiert wird.
<code class="python">from operator import itemgetter from itertools import groupby sorted_input = sorted(input, key=itemgetter(1)) groups = groupby(sorted_input, key=itemgetter(1))</code>
Erstellen Sie eine Liste von Wörterbüchern mithilfe eines Verständnisses:
<code class="python">result = [{'type': k, 'items': [x[0] for x in v]} for k, v in groups]</code>
Vor Python 3.7 wurde die Reihenfolge der Schlüssel in Wörterbüchern nicht beibehalten. Um die ursprüngliche Reihenfolge beizubehalten, verwenden Sie „collections.OrderedDict“.
<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]</code>
Seit Python 3.7 behalten reguläre Wörterbücher die Einfügereihenfolge bei, sodass OrderedDict nicht mehr erforderlich ist.
Das obige ist der detaillierte Inhalt vonWie kann ich eine Liste von Paaren in Python effizient nach dem zweiten Element jedes Paares gruppieren und gleichzeitig das erste Element als Liste im gruppierten Ergebnis behalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!