【问题标题】:How to use a custom predicate sort with Python如何在 Python 中使用自定义谓词排序
【发布时间】:2016-09-26 00:36:18
【问题描述】:

我有一个类似[[1,2,"s"],[1,5,"e"],...] 的列表列表,其中第三个值始终是se。如何调用 sort() 以便列表根据以下内容排序:

  1. 第一个索引
  2. 如果第一个索引相同,则 s 优先。

谢谢

【问题讨论】:

    标签: python sorting python-3.x


    【解决方案1】:

    您可以将自定义键函数传递给list.sort,用于生成项目的比较键:

    >>> l = [[1, 5, 'e'], [1, 2, 's'], [0, 4, 'e']]
    >>> l.sort(key=lambda x: (x[0], -ord(x[2])))
    >>> l
    [[0, 4, 'e'], [1, 2, 's'], [1, 5, 'e']]
    

    【讨论】:

      【解决方案2】:

      编写一个自定义的key 函数。

      def sort_key(list_):
          if list_[2] == 's':
              return (list_[0], 0)
          return (list_[0], 1)
      
      test_list = [[1, 2, 's'], [1, 5, 'e'], [2, 4, 'e'], [2, 3, 's']]
      test_list.sort(key=sort_key)
      # [[1, 2, 's'], [1, 5, 'e'], [2, 3, 's'], [2, 4, 'e']]
      

      【讨论】:

        猜你喜欢
        • 2013-07-24
        • 2018-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多