我有一个表格的嵌套元组列表:
[(a, (b, c)), ...]
现在我想选择最大化 a 的元素,同时最小化 b 和 c 。例如在
中[(7, (5, 1)), (7, (4, 1)), (6, (3, 1))]
赢家应该是
(7, (4, 1))
感谢任何帮助。
答案 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)]