Skip to main content
 首页 » 编程设计

python之按 a, -c, b 对字符串矩阵 [[a, b, c], ...] 进行排序,保持顺序

2025年05月04日19qq号

我在 Python 中有一个包含三个字符串的列表,例如,

m = [['pig', 'quartz', '1'], ['pork', 'nails', '1'], ...] 

我想按索引 0 对其进行排序,然后以相反的顺序按索引 2 进行排序,然后按索引 1 进行排序。在排序的每一步中,我都希望保持其他列强加的顺序。例如,

pork       barn         4 
pork       barn2        4 
pork       nails        1 
pig        quartz       1 
quinoa     pail         1 
quinoa     quatern      1 
quail      quatern      1 
radish     barn         1 
radish     barn2        1 
radish     inbox        3 
radish     snow         1 

会变成:

pig        quartz       1 
pork       barn         4 
pork       barn2        4 
pork       nails        1 
quail      quatern      1 
quinoa     pail         1 
quinoa     quatern      1 
radish     inbox        3    <- 
radish     barn         1 
radish     barn2        1 
radish     snow         1 

也就是说,按第一列排序,然后在第一列的每一组内排序( pig 、 pig 肉、鹌鹑,...),按第三列反向排序,然后在第一列-第三列的每一组内排序((pig, 1), (pork, 4), (pork, 1), ...),按第二列排序。

我怎样才能很好地做到这一点?从概念上讲,如果 operator.itemgetter() 可以对排序顺序和索引进行编码,我会想要像 m.sort(key=operator.itemgetter(0, -2, 1)).

请您参考如下方法:

def key(item): 
    return item[0], -int(item[2]), item[1] 
m.sort(key = key) 

附言。 cmp 关键字参数为 removed from Python3 .为了将来的兼容性,您可能希望坚持使用 key。