如何以每對的第二個元素對 Python 中的對清單進行有效分組,同時將第一個元素保留為分組結果中的清單?

Mary-Kate Olsen
發布: 2024-10-31 04:11:01
原創
254 人瀏覽過

How can I efficiently group a list of pairs in Python by the second element of each pair, while retaining the first element as a list within the grouped result?

Python Group By

人們可能會遇到需要按每對中的第二個元素對一組資料分組,同時將第一個元素保留為清單的情況分組結果。這可以在 Python 中使用以下步驟有效地實現。

使用字典

使用集合模組中的 defaultdict 建立一個字典,其中鍵是該對的第二個元素。然後,迭代輸入列表並將第一個元素附加到對應鍵的值。

<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>
登入後複製

使用列表理解將字典轉換為預期的JSON 格式:

<code class="python">result = [{'type': k, 'items': v} for k, v in res.items()]</code>
登入後複製

使用itertools.groupby

另一種方法涉及使用itertools.groupby,groupby

<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>
登入後複製
另一種方法涉及使用itertools.groupby,groupby但要求輸入清單依第二個元素排序。

<code class="python">result = [{'type': k, 'items': [x[0] for x in v]} for k, v in groups]</code>
登入後複製
使用推導式建立字典清單:

Python 版本注意事項

<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>
登入後複製
Python 3.7 之前,不保留字典中鍵的順序。若要保持原始順序,請使用 collections.OrderedDict。

從 Python 3.7 開始,常規字典會保持插入順序,因此不再需要 OrderedDict。

以上是如何以每對的第二個元素對 Python 中的對清單進行有效分組,同時將第一個元素保留為分組結果中的清單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!