首頁 >後端開發 >Python教學 >這是適合您的文章的標題,請記住問題格式: 如何在 Python 中按類型將資料分組:使用「defaultdict」和「itertools.groupby」的高效解決方案

這是適合您的文章的標題,請記住問題格式: 如何在 Python 中按類型將資料分組:使用「defaultdict」和「itertools.groupby」的高效解決方案

Linda Hamilton
Linda Hamilton原創
2024-10-27 07:06:03892瀏覽

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`

Python Group By

問題:

給定一組資料對,其中第一項是值,第二項是類型,根據類型進行分組。

範例:

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

期望結果:

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

解決方案

第1 步:建立字典

    使用collections.defaultdict 建立一個字典,其中鍵是項目類型,值是儲存值的清單。
  • 對於每個資料對,將值附加到與其類型對應的清單中。

第2 步:轉換為預期格式

    透過迭代其項目並使用「type」和「items」鍵建立字典,將字典轉換為預期格式。

範例程式碼:

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

使用itertools.groupby 的替代解決方案:使用itertools.groupby 的替代解決方案:

使用itertools.groupby >注意:此方法要求輸入為已排序。

    根據資料對的類型進行排序。
  • 使用 itertools.groupby 依類型將資料分組。
  • 迭代分組的項目以建立所需的輸出格式。

範例程式碼:

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

按鍵順序注意事項:

    在 Python 3.7 及更高版本中,字典預設保留插入順序。

以上是這是適合您的文章的標題,請記住問題格式: 如何在 Python 中按類型將資料分組:使用「defaultdict」和「itertools.groupby」的高效解決方案的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn