我在 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
。
我是一名优秀的程序员,十分优秀!