对元组列表进行排序时有多个要求

3
我有一个元组列表,即[(7, 14), (3, 12), (20, 22), (6, 14), (2, 12)]。我想按照元组中第二个值进行排序,但是如果第二个值相同,我希望在排序后的列表中较早的元素具有较小的第一个值。更明确地说,(6,14) 应该在排序列表中先于 (7,14)
目前,我有以下代码:
result = [(7, 14), (3, 12), (20, 22), (6, 14), (2, 12)]
result.sort(key = lambda a: a[1])
Output[]: [(3, 12), (2, 12), (7, 14), (6, 14), (20, 22)]

我的需求是:

Output[]: [(2, 12), (3, 12), (6, 14), (7, 14), (20, 22)]
3个回答

7
按照元组中元素反转的顺序进行排序。
>>> ts = [(7, 14), (3, 12), (20, 22), (6, 14), (2, 12)]
>>> ts.sort(key=lambda t: t[::-1])
>>> ts
[(2, 12), (3, 12), (6, 14), (7, 14), (20, 22)]

sortsorted默认按字典顺序进行排序,这意味着如果要排序的内容的第一个元素匹配,则会查看第二个元素以此类推。

lambda t: (t[1], t[0])也可以起作用。


1
您也可以使用itemgetter代替lambda:
from operator import itemgetter
result = [(7, 14), (3, 12), (20, 22), (6, 14), (2, 12)]

print(sorted(result, key=itemgetter(1, 0)))

输出:

[(2, 12), (3, 12), (6, 14), (7, 14), (20, 22)]

0
你可以尝试这个:-
result = sorted(result, key=lambda k :(k[1], k[0]))
print(result)

输出:-

[(2, 12), (3, 12), (6, 14), (7, 14), (20, 22)]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接