【问题标题】:Python - order list of lists by multiple column indexesPython - 按多列索引的列表顺序列表
【发布时间】:2016-03-21 11:33:50
【问题描述】:

假设我在 Python 中有以下列表 x

[['a',6,'aa']
['d',7,'bb']]
['c',1,'cc']
['a',4,'dd']
['d',2,'ee']]

我想对其元素进行排序以获得以下结果

[['a',4,'dd']
['a',6,'aa']
['c',1,'cc']
['d',2,'ee']
['d',7,'bb']]

也就是说,我想按两列对其进行排序,第一列(最重要的)和第二列(不太重要的)。这可能是一个重复的问题,但我一直无法找到解决方案...

【问题讨论】:

  • 你可以试试:'data.sort(0)'

标签: python sorting multiple-columns


【解决方案1】:

以下排序列表按第一个元素,然后按第二个元素:

>>> sorted(a, key=lambda x:(x[0], x[1]))
[['a', 4, 'dd'], ['a', 6, 'aa'], ['c', 1, 'cc'], ['d', 2, 'ee'], ['d', 7, 'bb']]

【讨论】:

    【解决方案2】:

    由于是否也按第三列排序并不重要,因此您可以在此处使用普通的sort,并获得相同的结果:

    >>> sorted(a)
    [['a', 4, 'dd'], ['a', 6, 'aa'], ['c', 1, 'cc'], ['d', 2, 'ee'], ['d', 7, 'bb']]
    

    这是因为列表是从左到右比较并按字典顺序排序的。

    如果您确实想按任意列顺序进行排序,则应使用operator.itemgetter,这比对key 使用lambda 函数要快。

    >>> import operator
    >>> sorted(a, key=operator.itemgetter(1, 0))  # order by column 1 first, then 0.
    [['c', 1, 'cc'], ['d', 2, 'ee'], ['a', 4, 'dd'], ['a', 6, 'aa'], ['d', 7, 'bb']]
    

    【讨论】:

      【解决方案3】:

      如果从第一个元素到最后一个元素应用排序,您可以简单地使用sorted,因为sorted 会自动处理。

      a = [['a',6,'aa'],['d',7,'bb'],['c',1,'cc'],['a',4,'dd'],['d',2,'ee']]
      sorted(a)
      
      [['a', 4, 'dd'],
      ['a', 6, 'aa'],
      ['c', 1, 'cc'],
      ['d', 2, 'ee'],
      ['d', 7, 'bb']]
      

      【讨论】:

        猜你喜欢
        • 2022-10-25
        • 1970-01-01
        • 2017-06-23
        • 2011-05-14
        • 2019-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-22
        相关资源
        最近更新 更多