Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah saya boleh mengumpulkan senarai pasangan dalam Python dengan cekap mengikut elemen kedua setiap pasangan, sambil mengekalkan elemen pertama sebagai senarai dalam hasil terkumpul?

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
Mary-Kate Olsenasal
2024-10-31 04:11:01235semak imbas

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>

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>

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>

Buat senarai kamus menggunakan pemahaman:

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

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>

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!

Kenyataan:
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