【问题标题】:Sorting a list of tuples by their second element, which is a list [duplicate]按第二个元素对元组列表进行排序,这是一个列表[重复]
【发布时间】:2016-03-17 00:48:59
【问题描述】:

当元素只是一个单独的整数时,我已经掌握了按第二个元素对元组列表进行排序的窍门,但是关于第二个元素是整数列表的一些事情让我很困惑。例如下面的列表...

[("Jack", [1,2,5,3]), ("Anna", [7,8,5,2]), ("Ryan", [1,2,1,1])]

...我正在尝试根据每个元组中列表的总和对元组列表进行升序排序(以便在此示例中产生以下结果)...

[("Ryan", [1,2,1,1]), ("Jack", [1,2,5,3]), ("Anna", [7,8,5,2])]

谢谢

edit:我的问题与Sort a list of tuples by 2nd item (integer value) 不同,因为我的问题专门指的是第二个元素是列表的情况,这是我的绊脚石所在。感谢您迄今为止提供的有用回复。

【问题讨论】:

  • 如果没有对以下任何内容发表评论,是否回答了您的问题

标签: python list sorting tuples


【解决方案1】:

您可以使用排序函数的key 属性

代码:

check = [("Jack", [1, 2, 5, 3]), ("Anna", [7, 8, 5, 2]), ("Ryan", [1, 2, 1, 1])]
sorted(check, key=lambda x: sum(x[1]))

输出:

[('Ryan', [1, 2, 1, 1]), ('Jack', [1, 2, 5, 3]), ('Anna', [7, 8, 5, 2])]

注意事项:

  • 首先我创建了一个列表检查
  • sorted函数用于创建排序列表
  • key 属性与sum 一起传递,以按元组中list 的总和进行排序

对于更强大的方法,您可以使用以下方法

代码1:

check = [("Jack", [1, 2, 5, 3]), ("Anna", [7, 8, 5, 2]), ("Ryan", [1, 2, 1, 1])]
def validator(lst):
    if isinstance(lst,list):
        return sum(lst)
    else:
        return lst
print sorted(check, key=lambda x: validator(x[1]))

输出:

[('Bad', 2), ('Ryan', [1, 2, 1, 1]), ('Jack', [1, 2, 5, 3]), ('Anna', [7, 8, 5, 2])]

【讨论】:

    【解决方案2】:

    您可以在sorted 中向key 提供一个函数:

    L = [("Jack", [1,2,5,3]), ("Anna", [7,8,5,2]), ("Ryan", [1,2,1,1])]
    sorted(L, key=lambda x: sum(x[1])) 
    [('Ryan', [1, 2, 1, 1]), ('Jack', [1, 2, 5, 3]), ('Anna', [7, 8, 5, 2])]
    

    这个func = lambda x: sum(x[1]) 相当于:

    def func(x):
        return sum(x[1])
    

    现在您可以使用 func 代替 lambda 表达式:

    sorted(L, key=func) 
    

    该函数的返回值,即元组中第二个元素的总和将作为排序标准。

    【讨论】:

      猜你喜欢
      • 2012-03-13
      • 2012-03-08
      • 1970-01-01
      • 1970-01-01
      • 2017-03-21
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      • 1970-01-01
      相关资源
      最近更新 更多