【问题标题】:How sorted lambda with two keys?如何用两个键对 lambda 进行排序?
【发布时间】:2012-12-20 15:16:23
【问题描述】:

我在用这个

ThreadList.append([''.join(map(str,[Thread])), date, rrf[5]])

SendThreadList = ''

ThreadList = sorted(ThreadList, key=lambda Entry: Entry[1], reverse=True)
ThreadList = sorted(ThreadList, key=lambda Entry: Entry[2], reverse=True)

sorted 只显示第二个排序的,如何用 key 中的两个条目排序??

【问题讨论】:

  • 对不起我的英语不好,我是巴西人
  • 您想用''.join(map(str,[Thread])) 实现什么目标?应用map,我得到''.join([str(Thread)]),当然就是str(Thread)

标签: python map lambda sorted


【解决方案1】:

如果您想按 Entry[1] 排序,然后按 Entry[2] 排序,那么您可以让 lambda 以元组的形式返回...:

ThreadList = sorted(ThreadList, key=lambda Entry: (Entry[1], Entry[2]), reverse=True)

使用operator 模块和key=operator.itemgetter(1, 2) 有时更具可读性(并且可能更快)

【讨论】:

  • @GeorgeSet。抱歉 - 我不明白 - 你可以尝试重新措辞吗?
  • ThreadList = sorted(ThreadList, key=lambda Entry: (Entry[1], Entry[2]), reverse=True)
  • @GeorgeSet。我没有得到的是“检查条目 [2] 是否为 1”?
  • @GeorgeSet。是的,但作为一个新问题可能会更好,并提供一些关于您想要实现的目标的背景信息。
【解决方案2】:

虽然这是错误的做法,但如果您交换订单,您的示例将起作用:

ThreadList = sorted(ThreadList, key=lambda Entry: Entry[2], reverse=True)
ThreadList = sorted(ThreadList, key=lambda Entry: Entry[1], reverse=True)

Python 排序是稳定的 - 如果两个条目与 [1] 并列,它们将保持第一个排序的顺序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多