嵌套元组列表的高级排序条件

时间:2010-09-30 14:17:10

标签: python list sorting tuples

我有一个表格的嵌套元组列表:

[(a, (b, c)), ...]

现在我想选择最大化 a 的元素,同时最小化 b c 。例如在

[(7, (5, 1)), (7, (4, 1)), (6, (3, 1))]
赢家应该是

(7, (4, 1))

感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

>>> max(lst, key=lambda x: (x[0], -x[1][0], -x[1][1]))
(7, (4, 1))

答案 1 :(得分:4)

根据我的理解,你想逐渐减少a,然后按b逐步排序,然后按c排序。如果这是对的,你可以这样做:

>>> l=[(7, (5, 1)), (7, (4, 1)), (6, (3, 2)), (6, (3, 1))]
>>> sorted(l, key = lambda x: (-x[0], x[1]))
[(7, (4, 1)), (7, (5, 1)), (6, (3, 1)), (6, (3, 2))]

挑选“胜利者”就像挑选第一个元素一样简单。

如果b和c应该总结一下,在我的示例中,它只是sum(x[1])而不是x[1]

我的key函数返回一个元组,因为Python正确排序包含多个元素的元组:

>>> sorted([(1,2), (1,1), (1,-1), (0,5)])
[(0, 5), (1, -1), (1, 1), (1, 2)]