如何按子列表的第一项然后按第三项对列表进行排序

2024-04-25 14:05:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张单子。例如

[ 
[1, 2, 0.10], 
[1, 3, 0.22],
[1, 4, 0.20],
[1, 5, 0.37],
[1, 8, 0.60],
[1, 10, 0.01],
[1, 15, 0.26],
[2, 3, 0.28],
[2, 6, 0.12],
[2, 7, 0.72],
[2, 10, 0.77],
[2, 11, 0.36],
...
]

我想先按子列表的第一项排序,然后按第三项排序,得到每个子列表的前三个结果, 怎么做?谢谢!你知道吗

结果示例

[ 
[1, 15, 0.26],
[1, 5, 0.37],
[1, 8, 0.60],
[2, 11, 0.36],
[2, 7, 0.72],
[2, 10, 0.77],
...
]

Tags: 示例列表排序单子按子
1条回答
网友
1楼 · 发布于 2024-04-25 14:05:14

这里有一个使用itertools.groupby的解决方案。我们使用tuple键按第一项排序,然后按相反的顺序按最后一项排序。你知道吗

from itertools import groupby

sorter = sorted(A, key=lambda x: (x[0], -x[2]))
grouper = groupby(sorter, key=lambda x: x[0])

res = [list(j)[:3] for _, j in grouper]

print(res)

[[[1, 8, 0.6], [1, 5, 0.37], [1, 15, 0.26]],
 [[2, 10, 0.77], [2, 7, 0.72], [2, 11, 0.36]]]

似乎要先按降序排序,然后按升序排序。如果这是一个要求,您可以反转结果,即

res = [list(j)[:3][::-1] for _, j in grouper]

感谢@伊夫·库尼斯谢谢你的建议。你知道吗

相关问题 更多 >