Bagaimanakah saya boleh mengumpulkan senarai pasangan dalam Python dengan cekap mengikut elemen kedua setiap pasangan, sambil mengekalkan elemen pertama sebagai senarai dalam hasil terkumpul?

Mary-Kate Olsen
Lepaskan: 2024-10-31 04:11:01
asal
347 orang telah melayarinya

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?

Kumpulan Python Oleh

Seseorang mungkin menghadapi keperluan untuk mengumpulkan set pasangan data mengikut elemen kedua setiap pasangan, sambil mengekalkan elemen pertama sebagai senarai dalam hasil berkumpulan. Ini boleh dicapai dengan cekap dalam Python menggunakan langkah berikut.

Menggunakan Kamus

Buat kamus menggunakan defaultdict daripada modul koleksi, dengan kuncinya ialah elemen kedua pasangan. Kemudian, ulangi senarai input dan tambahkan elemen pertama pada nilai kunci yang sepadan.

<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>
Salin selepas log masuk

Tukar kamus ke dalam format JSON yang dijangka menggunakan pemahaman senarai:

<code class="python">result = [{'type': k, 'items': v} for k, v in res.items()]</code>
Salin selepas log masuk

Menggunakan itertools.groupby

Pendekatan lain melibatkan penggunaan itertools.groupby tetapi memerlukan senarai input diisih mengikut elemen kedua.

<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>
Salin selepas log masuk

Buat senarai kamus menggunakan pemahaman:

<code class="python">result = [{'type': k, 'items': [x[0] for x in v]} for k, v in groups]</code>
Salin selepas log masuk

Pertimbangan Versi Python

Sebelum Python 3.7, susunan kekunci dalam kamus tidak disimpan. Untuk mengekalkan susunan asal, gunakan koleksi.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>
Salin selepas log masuk

Sejak Python 3.7, kamus biasa mengekalkan susunan sisipan, jadi OrderedDict tidak lagi diperlukan.

Atas ialah kandungan terperinci Bagaimanakah saya boleh mengumpulkan senarai pasangan dalam Python dengan cekap mengikut elemen kedua setiap pasangan, sambil mengekalkan elemen pertama sebagai senarai dalam hasil terkumpul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan