在Python中按多个子字符串对字符串排序

问题描述

我有以下格式的文件名列表<number>-<number>

以下示例:

0-0
1-0
1-1
1-2
1-3

...

31-0
31-1
31-2

我想将它们作为排序列表阅读。当我在sort()输出上执行listdir()时,在1-x系列之后紧接着是10-x。

当我执行.sort(key=lambda x: int(x.split('-')[0]))时,得到的第一个数字已排序,但第二个数字(连字符后的那个未排序)。示例:["21-3","21-0","21-2","21-1"]

因此,如何确保我可以读取文件名,文件名按文件中的连字符开头,而也按文件名中的第二个数字排序(连字符后的第一个)?

所需的输出

["0-0","1-0","1-1","1-2",... "31-0","31-1","31-2","31-3"]

解决方法

items = ["31-1","31-0","0-0","0-2","0-1"]

print(sorted(items,key=lambda s: tuple(map(int,s.split("-")))))

输出:

['0-0','0-1','0-2','31-0','31-1']
>>>