我有一个列表,如下所示:
l =[
['abgegeben', 'abgegeb', 339],
['abgegebene', 'abgegeb', 46],
['abgegebenen', 'abgegeb', 30],
['abgegebenes', 'abgegeb', 4],
['abgefahren', 'abgefahr', 58],
['abgefahrene', 'abgefahr', 4],
['abgefahrenen', 'abgefahr', 4],
['abgefahrener', 'abgefahr', 4]
]
如您所见,子列表的第二个条目是第一个条目的词干。 由于茎是相同的,我想保留茎的子列表中有最高计数(339和58),并删除其他的如下:
l =[
['abgegeben', 'abgegeb', 339],
['abgefahren', 'abgefahr', 58]
]
我的列表包含数万个子列表。
我已经尝试用max
函数比较条目,并将结果附加到一个新列表中,但没有成功
我怎样才能解决这个问题
或使用
itertools.groupby
:输出:
IIUC,使用
itertools.groupby
:注意:如果您确定第二个条目已排序,则可以跳过
sorted
输出:
最内部的解释:
sorted(l, key=f)
:根据f
对l
进行排序,即使用l
中每个子列表的第二个条目。这是因为itertools.groupby
无法处理未排序的列表(尽管具有相同的键,但它会生成单独的组)groupby(sorted(l, key=f), key=f)
:然后使用与sorted
相同的键对排序的子列表进行分组。因此,与其两次使用相同的lambda,不如使用单键函数f
[max(g, key=lambda x:x[-1]) ...]
:最后max
返回由groupby
创建的组中的最大子列表。这一次,最大值是使用子列表的最后一个元素计算的,因此使用了新的lambda相关问题 更多 >
编程相关推荐