使用python排序列表列表

时间:2017-09-05 13:29:22

标签: python sorting

我有清单

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)]

有什么方法吗?我也尝试过运算符库,它给了我相同的结果。

2 个答案:

答案 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数字并按升序排序。