如何通过两个值对这个元组列表进行排序?

2024-04-28 17:50:45 发布

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

我有一个元组列表:[(2, Operation.SUBSTITUTED), (1, Operation.DELETED), (2, Operation.INSERTED)]

我想用两种方式对这个列表进行排序:

先按其第一个值按升序排序,即1, 2, 3... etc 第二个按字母倒序排列的第二个值,即Operation.SUBSTITITUTED, Operation.INSERTED, Operation, DELETED

因此,上述清单应按以下顺序排列:

[(1, Operation.DELETED), (2, Operation.SUBSTITUTED), (2, Operation.INSERTED)]

我该怎么整理这个单子?在


Tags: 列表排序字母方式etcoperation整理单子
3条回答

您可以使用这个:

from operator import itemgetter
d = [(1, 'DELETED'), (2, 'INSERTED'), (2, 'SUBSTITUTED')]
d.sort(key=itemgetter(1),reverse=True)
d.sort(key=itemgetter(0))
print(d)

在这种特殊情况下,因为整数的比较顺序可以很容易地颠倒,因此可以使用整数键的负值和反转键一次性排序:

lst = [(2, 'Operation.SUBSTITUTED'), (1, 'Operation.DELETED'), (2, 'Operation.INSERTED')]
res = sorted(lst, key=lambda x: (-x[0],x[1]), reverse=True)

结果:

^{pr2}$

否定整数键会取消“反转”方面,只为第二个字符串条件保留。在

由于排序是guaranteed to be stable,您可以通过两个步骤来完成:

lst = [(2, 'Operation.SUBSTITUTED'), (1, 'Operation.DELETED'), (2, 'Operation.INSERTED')]

res_int = sorted(lst, key=lambda x: x[1], reverse=True)
res = sorted(res_int, key=lambda x: x[0])

print(res)

# [(1, 'Operation.DELETED'), (2, 'Operation.SUBSTITUTED'), (2, 'Operation.INSERTED')]

相关问题 更多 >