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
Freigeben: 2024-10-31 04:11:01
Original
254 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

Ü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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!