Python 3.3使用多个键对元组列表进行排序

时间:2014-05-04 10:08:29

标签: sorting python-3.x

我有一个问题(在Project Euler问题中遇到),因为我有一个元组列表列表,例如。

  [...
    [(-119, 359), (668, -609), (-358, -494)], 
    [(440, 929), (968, 214), (760, -857)], 
    [(-700, 785), (838, 29), (-216, 411)], 
    [(-770, -458), (-325, -53), (-505, 633)],
  ...] 

我想要做的是用具有最小第一个值的元组对它们进行排序,但如果它们相等,则比较第二个值并按最小值排序。我一直在寻找,似乎无法找到办法。我发现的唯一的东西是旧的python 2.x版本的sort,它给出了一个cmp参数。

非常感谢任何帮助,

此致

Ybrad

编辑:

我刚刚意识到以上措辞略有错误。我想要做的是对每个子列表中的元组进行排序,而不是整个列表列表。

1 个答案:

答案 0 :(得分:1)

你可以很容易地做到:

a = [sorted(i) for i in a]

>>> print a
[[(-358, -494), (-119, 359), (668, -609)],
 [(440, 929), (760, -857), (968, 214)],
 [(-700, 785), (-216, 411), (838, 29)],
 [(-770, -458), (-505, 633), (-325, -53)]]

对于第二个请求,您可以这样做:

a = [sorted(i, key=lambda i: (i[0], -i[1])) for i in a]