Dalam Python, mengumpulkan data mengikut kunci tertentu melibatkan penyusunan item berdasarkan atribut biasa. Ini boleh dicapai melalui pelbagai kaedah, menawarkan penyelesaian yang cekap untuk set data yang besar. Mari kita terokai cara mengumpulkan data dengan berkesan.
Pertimbangkan senario di mana kita mempunyai set pasangan data dan matlamatnya adalah untuk mengumpulkannya berdasarkan jenisnya. Untuk mencapai ini, kita boleh memanfaatkan kelas collections.defaultdict. Ia mencipta kamus di mana kunci yang hilang dimulakan secara automatik dengan nilai lalai, membolehkan kami menambahkan item pada kunci ini.
<code class="python">from collections import defaultdict input = [ ('11013331', 'KAT'), ('9085267', 'NOT'), ('5238761', 'ETH'), ('5349618', 'ETH'), ('11788544', 'NOT'), ('962142', 'ETH'), ('7795297', 'ETH'), ('7341464', 'ETH'), ('9843236', 'KAT'), ('5594916', 'ETH'), ('1550003', 'ETH'), ] res = defaultdict(list) for v, k in input: res[k].append(v) print([{ 'type': k, 'items': v } for k, v in res.items()])</code>
Output:
[{'items': ['9085267', '11788544'], 'type': 'NOT'}, {'items': ['5238761', '5349618', '962142', '7795297', '7341464', '5594916', '1550003'], 'type': 'ETH'}, {'items': ['11013331', '9843236'], 'type': 'KAT'}]
Pendekatan lain melibatkan penggunaan itertools.groupby. Fungsi ini memerlukan input untuk diisih terlebih dahulu. Ia menjana kumpulan elemen berturut-turut di mana nilai kunci yang ditentukan adalah sama.
<code class="python">import itertools from operator import itemgetter sorted_input = sorted(input, key=itemgetter(1)) groups = itertools.groupby(sorted_input, key=itemgetter(1)) print([{ 'type': k, 'items': [x[0] for x in v]} for k, v in groups])</code>
Output:
[{'items': ['5238761', '5349618', '962142', '7795297', '7341464', '5594916', '1550003'], 'type': 'ETH'}, {'items': ['11013331', '9843236'], 'type': 'KAT'}, {'items': ['9085267', '11788544'], 'type': 'NOT'}]
Sebelum Python 3.7, kamus tidak mengekalkan susunan sisipan. Untuk menangani perkara ini, collections.OrderedDict boleh digunakan untuk mengekalkan susunan pasangan nilai kunci.
<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] print([{ 'type': k, 'items': v } for k, v in res.items()])</code>
Walau bagaimanapun, dalam Python 3.7 dan lebih baharu, kamus biasa mengekalkan susunan sisipan, menjadikan OrderedDict tidak diperlukan.
Atas ialah kandungan terperinci Bagaimanakah anda cekap mengumpulkan data dalam Python berdasarkan kunci tertentu, dan apakah kaedah berbeza yang tersedia untuk tugas ini?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!