a = [('dog', 4, 5), ('cat', 1, 3), ('house', 6, 3), ('car', 1, 1), ('boyfriend', 2, 2), ('doll', 1, 1)
如何根据两个数字之间的总和按降序对此列表进行排序,如果总和相同,我如何根据第一个元素对其进行排序?
我的清单应该是:
a = [('dog', 4, 5), ('house', 6, 3), ('boyfriend', 2, 2), ('cat', 1, 3), ('car', 1, 1), ('doll', 1, 1)
答案 0 :(得分:3)
使用自定义key
函数返回元组,其中第一项是总和,第二项是每个子元素的第一项:
In [2]: sorted(a, key=lambda item: (-(item[1] + item[2]), item[0]))
Out[2]:
[('dog', 4, 5),
('house', 6, 3),
('boyfriend', 2, 2),
('cat', 1, 3),
('car', 1, 1),
('doll', 1, 1)]
请注意,我们返回负数并按总和进行反向排序,并保持对次要键排序的要求为升序。