Python对带数字的字符串文件名执行sorted排序结果异常,如何解决?
问题原因
Python默认对字符串执行字典序排序,逐字符比对ASCII值,不会自动识别字符串内部的数值大小。比如比对100.0-178.pom和15.00-178.pom时,第一个字符1一致,比对第二个字符时0的ASCII值小于5,因此100.0-178.pom会排在15.00-178.pom之前,不符合预期的数值排序逻辑。
修复方案
给sorted函数指定key参数,提取文件名中需要排序的数值部分转为数字类型,作为排序依据即可。注意不要用list作为变量名,会覆盖Python内置的list类型:
file_list = [ '10.50-178.pom', '15.00-178.pom','100.0-178.pom', '11.00-178.pom', '110.0-178.pom', '120.0-178.pom', '130.0-178.pom', '10.00-178.pom', '140.0-178.pom' ] # 按横杠前的数值大小排序 sorted_list = sorted(file_list, key=lambda x: float(x.split('-')[0])) print(sorted_list)
运行后输出符合预期的结果:
['10.00-178.pom', '10.50-178.pom', '11.00-178.pom', '15.00-178.pom', '100.0-178.pom', '110.0-178.pom', '120.0-178.pom', '130.0-178.pom', '140.0-178.pom']
如果后续文件名的规则发生变化,调整key对应的数值提取逻辑即可。
内容的提问来源于stack exchange,提问作者Vasyl Sokolenko
相关产品推荐
相关产品推荐

