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.