Python 中的二元元素列表分組


假設我們有一個列表的列表,其中每個子列表有兩個元素。每個子列表的一個元素在列表的許多其他子項中是通用的。我們需要建立一個最終列表,該列表將顯示按公共元素分組的子列表。

使用集合和對映

在給定的列表中,第一個元素是字串,第二個元素是數字。因此,我們建立一個臨時列表來儲存每個子列表的第二個元素。然後,我們將子列表與臨時列表中的每個元素進行比較,並按照設計進行分組。

示例

 線上演示

listA = [['Mon', 2], ['Tue', 3], ['Wed', 3],
["Thu", 1], ['Fri', 2], ['Sat', 3],
['Sun', 1]]
# With set and map
temp = set(map(lambda i: i[1], listA))
res = [[j[0] for j in listA if j[1] == i] for i in temp]
# Result
print("The list with grouped elements is : \n" ,res)

輸出

執行上述程式碼將得到以下結果:

The list with grouped elements is :
[['Thu', 'Sun'], ['Mon', 'Fri'], ['Tue', 'Wed', 'Sat']]

使用 groupby 和 itemgetter

itemgetter 函式用於獲取每個子列表的第二個元素。然後,根據 itemgetter 函式的結果應用 groupby 函式。

示例

 線上演示

from itertools import groupby
from operator import itemgetter
listA = [['Mon', 2], ['Tue', 3], ['Wed', 3],["Thu", 1], ['Fri', 2], ['Sat', 3],['Sun', 1]]
# With groupby
listA.sort(key = itemgetter(1))
groups = groupby(listA, itemgetter(1))
res = [[i[0] for i in val] for (key, val) in groups]
# Result
print("The list with grouped elements is : \n" ,res)

輸出

執行上述程式碼將得到以下結果:

The list with grouped elements is :
[['Thu', 'Sun'], ['Mon', 'Fri'], ['Tue', 'Wed', 'Sat']]

使用 defaultdict

我們應用 defaultdict 函式將子列表的第二個元素作為字典的鍵。然後,在結果列表中,我們追加來自子列表第一個元素的值。

示例

 線上演示

import collections
listA = [['Mon', 2], ['Tue', 3], ['Wed', 3],["Thu", 1], ['Fri', 2], ['Sat', 3],['Sun', 1]]
# With defaultdict
res = collections.defaultdict(list)
for val in listA:
   res[val[1]].append(val[0])
# Result
print("The list with grouped elements is : \n" ,res)

輸出

執行上述程式碼將得到以下結果:

The list with grouped elements is :
defaultdict(<class 'list'>, {2: ['Mon', 'Fri'], 3: ['Tue', 'Wed', 'Sat'], 1: ['Thu', 'Sun']})

更新於:2020年7月9日

178 次瀏覽

開啟您的 職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.