考虑 Python 中的以下嵌套列表:[ ['Val1', 1, 'X'], ['Val2', 1, 'X'], ['Val2', 2, 'Y'], ['Val3', 2, 'Y'], ['Val4', 2, 'Y'], ['Val4', 3, 'Z'], ['Val5', 3, 'Z'], ['Val6', 3, 'Z'],]索引 0 处有重复项。我想从中获取一个新列表,删除重复项,保留索引 1 处具有最高值的列表。在上面的示例中,结果列表应如下所示:[ ['Val1', 1, 'X'], ['Val2', 2, 'Y'], ['Val3', 2, 'Y'], ['Val4', 3, 'Z'], ['Val5', 3, 'Z'], ['Val6', 3, 'Z'],]
3 回答
手掌心
TA贡献1942条经验 获得超3个赞
>>> from itertools import groupby >>> [max(g, key=lambda i: i[1]) for k, g in groupby(data, lambda i: i[0])] [['Val1', 1, 'X'], ['Val2', 2, 'Y'], ['Val3', 2, 'Y'], ['Val4', 3, 'Z'], ['Val5', 3, 'Z'], ['Val6', 3, 'Z']]
jeck猫
TA贡献1909条经验 获得超7个赞
使用熊猫
x = [['Val1', 1, 'X'],
['Val2', 1, 'X'],
['Val2', 2, 'Y'],
['Val3', 2, 'Y'],
['Val4', 2, 'Y'],
['Val4', 3, 'Z'],
['Val5', 3, 'Z'],
['Val6', 3, 'Z']]
import pandas as pd
pd.DataFrame(x).sort_values([0, 1]).drop_duplicates(subset=[0], keep='last').values.tolist()
慕斯709654
TA贡献1840条经验 获得超5个赞
步骤1:根据第二个属性排序。步骤2:根据第一个属性进行排序。由于排序在 python 中是“稳定的”,因此步骤 1 中的排序顺序将在步骤 2 之后保留。
l = # list of similarly formatted lists l = sorted(l, key=itemgetter(1)) l = sorted(l, key=itemgetter(0))
或者,编写您自己的比较键函数。我认为这实际上应该有效,因为元组是按从左到右的顺序进行比较的:
l = sorted(l, key=tuple)
添加回答
举报
0/150
提交
取消