如何在sort lambda中解决zip列表

时间:2016-08-10 06:31:45

标签: python sorting lambda

我有一个包含2个属性的类,这些属性是列表本身:

class data...:
    list1 = [["g1", 2.0], ["x1", 3.0]...] # n elements
    list2 = [[2, 4, 5],[3, 2, 1]...] # n elements

我需要根据list2的第二个元素的值对两个列表进行压缩排序。

zipped = zip(dataobj.list1, dataobj.list2)
zipped.sort(cmp = lambda k: dataobj.list2[2])

这似乎行不通。

如何引用dataobj.list2[2]的第二个元素,因为这不起作用,并给了我以下错误:

TypeError: <lambda>() takes exactly 1 argument (2 given)

1 个答案:

答案 0 :(得分:2)

cmp应该是对比较两个值的函数的引用。相反,你需要更简单的东西 - key字段。

最简单的方法是直接从zipped引用该值,而不是回到list2中的原始值。注意,BTW,python中的列表是从零开始的,因此第二个元素是[1],而不是[2]。长话短说:

zipped.sort(key = lambda k : k[1][1])