我想对元组列表进行排序,其中元组的类型为(a, b)
,其中a
和b
是整数。排序列表的关键应该是a
和b
之间的差异,即a - b
,要打破关系,它应按a
排序,两者都按降序排列。< / p>
我试过用这个:
def sort(list):
scores = sorted(list, key=lambda list: list[0], reverse=True)
scores = sorted(list, key=lambda list: (a - b), reverse=True)
但是,这似乎排除了差异并重新排序元组的第一个元素上排序的元素。
例如:
输入:
[(75, 10), (88, 4), (93, 9), (80, 5), (94, 10)]
预期输出:
[(94, 10), (93, 9), (88, 4), (80, 5), (75, 10)]
获得的输出:
[(93, 9), (88, 4), (94, 10), (80, 5), (75, 10)]
答案 0 :(得分:4)
您可以对复合键进行排序:
>>> def sort(list):
... return sorted(list, key=(lambda (a, b): ((a - b), a)), reverse=True)
...
>>> sort([(75, 10), (88, 4), (93, 9), (80, 5), (94, 10)])
[(94, 10), (93, 9), (88, 4), (80, 5), (75, 10)]
请参阅Python Wiki Sorting Howto了解一些不错的提示。
答案 1 :(得分:1)
list_sorted = sorted(list, key = lambda x: (x[0]-x[1], x[0]), reverse=True)
lambda
key
可以返回元组,其顺序可以指示排序优先级。
答案 2 :(得分:1)
要获得您要查找的订单,请使用复合键排序:
def sort(l):
scores = sorted(l, key=lambda(e): (e[0] - e[1], e[0]), reverse=True)
这将产生:
scores = [(94, 10), (93, 9), (88, 4), (80, 5), (75, 10)]
N.B: list
是一个关键字,不应该用作变量名。
答案 3 :(得分:1)
关键lambda想要一个输入值(一个元组可以)
sorted(data, key=lambda (a, b): (a-b, a), reverse=True)
答案 4 :(得分:0)
抱歉,我没有打破这种关系:/。我没有使用任何复杂的任何复杂的订单......这里:
def sort(list):
scores = sorted(list, key=lambda a: a[0], reverse=True)
return scores
print sort([(75, 10), (88, 4), (93, 9), (80, 5), (93, 11), (94, 10)])
控制台:
[(94, 10), (93, 9), (93, 11), (88, 4), (80, 5), (75, 10)]
当我对差异进行排序时,a-b,这就是结果:
def sort(list):
scores = sorted(list, key=lambda a: a[0], reverse=True)
scores = sorted(list, key=lambda a: a[0]-a[1], reverse=True)
return scores
print sort([(75, 10), (88, 4), (93, 9), (80, 5), (93, 11), (94, 10)])
控制台:
[(88, 4), (93, 9), (94, 10), (93, 11), (80, 5), (75, 10)]