lambda函数在排序中有多个变量

时间:2016-09-20 00:41:04

标签: python python-2.7 python-3.x sorting lambda

有一个有两个有价值域的类。我想按照以下标准对这些对的列表进行排序:

  1. 如果第一个域不同,请按第一个域排序;
  2. 否则,按第二个域排序。
  3. 很容易只用第一个域进行排序:lambda:

    list.sort(key=lambda x:x.first)
    

    sorted(list, key=lambda x:x.first)
    

    但如果我想进一步比较x.second,我该如何编写lambda函数?

1 个答案:

答案 0 :(得分:1)

将它们映射到tuple s!

sorted(list, key=lambda x:(x.first, x.second))

元组比较以您想要的相同方式发生 - 比较两个元组的第一个元素,如果它们相同,则继续并根据第二个元素的比较确定结果。

PS1:我假设可以比较x.firstx.second。 (类型,如整数/字符串,或定义__eq__的对象。

PS2:我建议在__lt__(..)课程上实施x。这样你就不必传递lambda来进行排序调用。