所以我有一个从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))
我想基于另一个专栏进行排序,如果它与该专栏相关,那么任何人都知道如何处理这个问题?提前感谢您的帮助。
仅供参考:另一列包含数字数据
答案 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的项进行排序。