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

标签 python string sorting multidimensional-array

我在 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

关于python - 按 a, -c, b 对字符串矩阵 [[a, b, c], ...] 进行排序,保持顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9689432/

相关文章:

java - 什么样的内存分配给大小为零的数组对象?

java - 按日期降序排序列表 - groovy madness

linux - 通过管道 awk 进行排序无法正确排序

php - 检查字符串中的空格

c++ - 将单个数组复制到多维数组

python - 查找并编辑文本文件

python - TensorFlow 对象检测 API : classification weights initialization when changing number of classes at training using pre-trained models

python 模块 ffpyplayer 显示或显示视频帧到屏幕

python - Python 中的多个 'Or' 条件求值器

c# - XML 到文本转换