問題:
給定一組資料對,其中第一項是值,第二項是類型,根據類型進行分組。
範例:
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 步:建立字典
第2 步:轉換為預期格式
範例程式碼:
<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 >注意:此方法要求輸入為已排序。
範例程式碼:
<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 中按類型將資料分組:使用「defaultdict」和「itertools.groupby」的高效解決方案的詳細內容。更多資訊請關注PHP中文網其他相關文章!