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?

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?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-31 04:11:01235Durchsuche

How can I efficiently group a list of pairs in Python by the second element of each pair, while retaining the first element as a list within the grouped result?

Python-Gruppierung nach

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.

Wörterbuch verwenden

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>

Verwenden itertools.groupby

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>

Überlegungen zur Python-Version

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!

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