为了账号安全,请及时绑定邮箱和手机立即绑定

嵌套列表重复排名

嵌套列表重复排名

呼如林 2023-07-27 16:07:31
考虑 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']]


查看完整回答
反对 回复 2023-07-27
?
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()



查看完整回答
反对 回复 2023-07-27
?
慕斯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)


查看完整回答
反对 回复 2023-07-27
  • 3 回答
  • 0 关注
  • 80 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信