当元素只是一个独奏整数时,我已经掌握了按第二个元素排序元组列表的问题,但是关于第二个元素是整数列表的东西正在抛弃我。例如,使用以下列表...
[("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)不同,因为我特指第二个元素是列表的情况,这是我的绊脚石。感谢您提供有用的回复。
答案 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)
该函数的返回值,即元组中第二个元素的总和将用作排序标准。