通过第二个元素(列表)对元组列表进行排序

时间:2015-12-11 07:07:51

标签: python list sorting tuples

当元素只是一个独奏整数时,我已经掌握了按第二个元素排序元组列表的问题,但是关于第二个元素是整数列表的东西正在抛弃我。例如,使用以下列表...

[("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])]

谢谢

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

2 个答案:

答案 0 :(得分:4)

您可以使用排序功能的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])]

备注:

  • 首先我创建了一个列表检查
  • 排序函数用于创建排序列表
  • 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])]

答案 1 :(得分:1)

您可以在key中为sorted提供一项功能:

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) 

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