python - 在Python中按多个子字符串对字符串进行排序

标签 python sorting python-3.8 natural-sort

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

示例如下:

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

...

31-0
31-1
31-2

我想将它们作为排序列表来阅读。当我这样做时sort()关于listdir()输出,10-x 紧接在 1-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']
>>> 

关于python - 在Python中按多个子字符串对字符串进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63937795/

相关文章:

Python np.diag() 出现内存错误

c - 对动态数组 c 进行排序

python - 在玩具示例中实现 python 装饰器

c# - 根据另一个对象对列表进行排序

python - 如何使用这个 ffmpeg python 脚本正确剪切视频

python - Pycharm IDE 中 Python 3.8 上的 Discord Bot

python - django admin 中的自定义查询过滤器

python - 递归规则(规则)的等价关系的实现

Python - 通过shell脚本激活conda env

c++ - 如何进行三个快速排序中位数的最坏情况排列