【问题标题】:how to do hierarchical sorting in python?如何在python中进行分层排序?
【发布时间】:2013-05-31 20:22:32
【问题描述】:

所以我有一个从 excel 电子表格中获取的二维数据数组,我目前正在根据包含关键性数据的列进行排序。

#rows contains my data that I'm sorting, it's a 2D array
searchdict = dict(Critical=1, High=2, Medium=3, Low=4)
rows.sort(key=lambda row: searchdict.get(row[11], 5))

如果它与该列平分,我想根据另一列进行排序,有人知道如何处理吗?提前感谢您的帮助。

仅供参考:另一列包含数字数据

【问题讨论】:

标签: python sorting


【解决方案1】:

在您的密钥中使用一个元组。这种方法通常被认为比连续进行两次排序更“pythonic”。

key=lambda row: (searchdict.get(row[11], 5), row[other_column]))

【讨论】:

  • OP 说另一列是数字的,因此不需要再次调用searchdict.get。 (顺便说一句:thg 的回答也不正确,因为如果你想做 2 次排序,你必须首先按 辅助键 排序,然后按主键。)
  • 哎呀,你是对的。 thg 的回答也不正确,因为 sort() 通常返回 None 而不是排序列表(sorted() 通常用于此目的)。
【解决方案2】:

最好的选择是将 key 与 python 的元组排序一起使用。

#rows contains my data that I'm sorting, it's a 2D array
searchdict = dict(Critical=1, High=2, Medium=3, Low=4)
rows.sort(key=lambda row: (searchdict.get(row[11], 5), searchdict.get(row[<secondary column index here>], 5)))

这体现了元组中最左边的元素在比较过程中被认为更重要的事实,如下所示:

>>> (6, 5) > (5, 6)
True
>>> (6, 5) > (6, 4)
True
>>> (6, 5) > (6, 6)
False
>>> (2, 1, 1) > (1, 1000, 1000)
True 

【讨论】:

    【解决方案3】:

    使用元组作为排序键函数的返回值:

    rows.sort(key=lambda row: (searchdict.get(row[11], 5), row[17]))
    

    Python 先排序索引为 0 的项目,然后排序索引为 1 的项目。

    【讨论】:

      猜你喜欢
      • 2022-01-20
      • 1970-01-01
      • 2018-11-13
      • 2023-03-19
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 2013-08-18
      • 1970-01-01
      相关资源
      最近更新 更多