Sorting Python 3.3使用多个键对元组列表进行排序
我遇到了一个小问题(在项目Euler问题期间遇到),因为我有一个元组列表,例如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)], ...] 我想做的是按第一个值最小的
[...
[(-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中是可能的吗?谢谢,这对将来应该是好的和有用的。