【问题标题】:Python, how to sort a list based on a sumPython,如何根据总和对列表进行排序
【发布时间】:2017-03-14 01:50:47
【问题描述】:
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) 

【问题讨论】:

    标签: python list python-3.x sorting


    【解决方案1】:

    使用自定义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)]
    

    请注意,我们将负和返回以按总和进行反向排序,并保持辅助键排序的要求为升序。

    【讨论】:

    • 总和是降序排列,所以添加-。另外sum(item[1:])item[1] + item[2] 来说似乎有点矫枉过正。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-09
    • 2013-12-01
    • 1970-01-01
    • 2014-03-13
    • 2016-07-13
    • 2021-06-27
    相关资源
    最近更新 更多