我有清单
value =[(22, 11, 195, 37), (19, 11, 184, 45), (300, 17, 12, 19), (210, 18, 128, 30) (100, 18, 128, 30)]
现在我需要在升序列表的前两个值的组合中对列表进行排序。
像这样s = [(19, 11, 184, 45), (22, 11, 195, 37), (300, 17, 12, 19),(100, 18, 128, 30), (210, 18, 128, 30) ]
我用过
s = sorted(value, key = lambda x: (x[1], x[0]))
我最终对列表的第二(x [1])值进行了排序,如下所示,
s = [(22, 11, 195, 37), (19, 11, 184, 45), (300, 17, 12, 19), (210, 18, 128, 30) (100, 18, 128, 30)]
有什么方法吗?我也尝试过运算符库,它给了我相同的结果。
答案 0 :(得分:2)
如您所知,sorted
函数(以及list.sort
方法)将一个键作为可选参数,它告诉您如何对元素进行排序。
您使用lambda x: (x[0], x[1])
作为键,但您的输出清楚地表明您希望第二个成员的优先级高于第一个成员。
试试这把钥匙:
l = sorted(l, key=lambda t: (t[1], t[0]))
这将对每个元组的第二个成员给予更高的重要性。
正如所料,输出是:
[(0, 0, 559, 225),
(19, 11, 184, 45),
(22, 11, 195, 37),
(300, 17, 12, 19),
(210, 18, 128, 30)]
答案 1 :(得分:1)
好吧,经过大量的小提琴后,我想我做到了。这是我的代码:
sorted(s, key=lambda x: (x[1] * 1, x[0]))
输出是:
[(19, 11, 184, 45), (22, 11, 195, 37), (300, 17, 12, 19), (100, 18, 128, 30), (210, 18, 128, 30)]
基本上它的作用是按索引1对元组进行排序,但如果索引1上有两个或更多元组具有相同的数字,它会检查它们的索引0数字并按升序排序。