如何在python中进行分层排序?

时间:2013-05-31 20:22:32

标签: python sorting

所以我有一个从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))

我想基于另一个专栏进行排序,如果它与该专栏相关,那么任何人都知道如何处理这个问题?提前感谢您的帮助。

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

4 个答案:

答案 0 :(得分:4)

在密钥中使用元组。这种方法通常被认为更多" pythonic"而不是连续做两种。

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

答案 1 :(得分:2)

python sort是stable,因此您可以按多次传递排序(按相反顺序):

data.sort(key=second criteria)
data.sort(key=first criteria)

这是最简单的选项,也可以比动态生成合成密钥更快。

答案 2 :(得分:1)

最好的选择是使用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 :(得分:0)

使用元组作为排序键功能的返回:

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

Python首先对索引为0的项进行排序,而对索引为1的项进行排序。