【问题标题】:lambda function with multiple variables in sorting [duplicate]排序中具有多个变量的lambda函数[重复]
【发布时间】:2016-09-20 00:41:03
【问题描述】:

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

  1. 如果第一个域不同,则按第一个域排序;
  2. 否则,按第二个域排序。

使用 lambda 很容易仅按第一个域进行排序:

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

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

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

【问题讨论】:

  • 你使用了多少个不同版本的python?
  • firstsecond 中的值的类型是什么?

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


【解决方案1】:

将它们映射到tuples!

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

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

PS1:我假设 x.firstx.second 可以比较。 (无论是整数/字符串等类型,还是定义了__eq__ 的对象。

PS2:我建议在x 的类上实现__lt__(..)。这样一来,您就不必传递 lambda 来调用排序。

【讨论】:

    猜你喜欢
    • 2012-06-08
    • 2012-10-28
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多