Berikut ialah tajuk yang sesuai untuk artikel anda, dengan mengambil kira format soalan: Cara Menghimpunkan Pasangan Data mengikut Jenis dalam Python: Penyelesaian Cekap dengan `defaultdict` dan `itertools.groupby`

Linda Hamilton
Lepaskan: 2024-10-27 07:06:03
asal
840 orang telah melayarinya

Here's a suitable title for your article, keeping the question format in mind: 

How to Group Data Pairs by Type in Python: Efficient Solutions with `defaultdict` and `itertools.groupby`

Kumpulan Python Oleh

Masalah:

Diberi satu set pasangan data di mana item pertama ialah nilai dan item kedua ialah jenis, kumpulkan mereka berdasarkan jenis.

Contoh:

input = [
  ('11013331', 'KAT'),
  ('9085267', 'NOT'),
  ('5238761', 'ETH'),
  ('5349618', 'ETH'),
  ('11788544', 'NOT'),
  ('962142', 'ETH'),
  ('7795297', 'ETH'),
  ('7341464', 'ETH'),
  ('9843236', 'KAT'),
  ('5594916', 'ETH'),
  ('1550003', 'ETH'),
]
Salin selepas log masuk

Keputusan yang Diingini:

result = [
  {
    'type': 'KAT',
    'items': ['11013331', '9843236']
  },
  {
    'type': 'NOT',
    'items': ['9085267', '11788544']
  },
  {
    'type': 'ETH',
    'items': ['5238761', '962142', '7795297', '7341464', '5594916', '1550003']
  },
]
Salin selepas log masuk

Penyelesaian:

Langkah 1: Buat Kamus

  • Gunakan collections.defaultdict untuk mencipta kamus dengan kekunci ialah jenis item dan nilai ialah senarai untuk menyimpan nilai.
  • Untuk setiap pasangan data, tambahkan nilai pada senarai yang sepadan dengan jenisnya.

Langkah 2: Tukar kepada Format Jangkaan

  • Tukar kamus kepada format yang dijangkakan dengan mengulangi itemnya dan mencipta kamus dengan kekunci 'jenis' dan 'item'.

Contoh Kod:

<code class="python">from collections import defaultdict

res = defaultdict(list)
for v, k in input:
    res[k].append(v)

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

Penyelesaian Alternatif menggunakan itertools.groupby:

Nota: Pendekatan ini memerlukan input untuk diisih.

  • Isih pasangan data berdasarkan jenisnya.
  • Gunakan itertools.groupby untuk mengumpulkan pasangan data mengikut jenis.
  • Lelar pada item yang dikumpulkan untuk dibuat format output yang diingini.

Contoh Kod:

<code class="python">from itertools import groupby, itemgetter

sorted_input = sorted(input, key=itemgetter(1))

groups = groupby(sorted_input, key=itemgetter(1))
output = [{'type': k, 'items': [x[0] for x in v]} for k, v in groups]</code>
Salin selepas log masuk

Nota pada Susunan Utama:

  • Dalam versi Python sebelum 3.7, susunan sisipan tidak dijamin untuk kamus. Untuk memastikan pesanan konsisten dengan input, gunakan collections.OrderedDict.
  • Dalam Python 3.7 dan lebih baharu, kamus mengekalkan susunan sisipan secara lalai.

Atas ialah kandungan terperinci Berikut ialah tajuk yang sesuai untuk artikel anda, dengan mengambil kira format soalan: Cara Menghimpunkan Pasangan Data mengikut Jenis dalam Python: Penyelesaian Cekap dengan `defaultdict` dan `itertools.groupby`. 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