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?
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.
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>
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>
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!