Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting Python 3.3使用多个键对元组列表进行排序_Sorting_Python 3.x - Fatal编程技术网

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

Sorting Python 3.3使用多个键对元组列表进行排序,sorting,python-3.x,Sorting,Python 3.x,我遇到了一个小问题(在项目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)], ...] 我想做的是按第一个值最小的

我遇到了一个小问题(在项目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版本的sorted,其中提供了一个cmp参数

任何帮助都将不胜感激

问候,

伊布拉德

编辑:


我刚刚意识到上面的措辞有点不正确。我想做的是对每个子列表中的元组进行排序,而不是将列表作为一个整体进行排序。

您可以很容易地做到这一点,如下所示:

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]

您希望您的输出是什么样子的?这应该可以工作,谢谢,但是假设在第一次匹配时,我们希望从最大到最小排序,而不是最小的第二个元素。这是如何实现的。@user163911,您的意思是按降序对元组排序?更像是在SQL中,您先按一个属性排序,然后按第二个属性对第一个属性相等的所有属性排序。例如,姓名列表[(“Doe”、“Jane”)、(“Burns”、“Sam”)、(“Farmey”、“Enid”)、(“Doe”、“John”)]以获得[(“Burns”、“Sam”)、(“Doe”、“John”)、(“Doe”、“Jane”)、(“Farmery”、“Enid”)]。在这里,它首先按姓氏升序排序,然后按第二个名字降序排序。这在python中是可能的吗?谢谢,这对将来应该是好的和有用的。