【问题标题】:Python ordering when reading/printing a Sorted(items) [duplicate]读取/打印排序(项目)时的Python排序[重复]
【发布时间】:2021-04-01 01:56:32
【问题描述】:

假设我在一个目录中有狗的图像,其名称和编号为:

dog 1.jpg
dog 2.jpg
dog 3.jpg
.
.
dog 11.jpg
dog 12.jpg

当我执行sorted(glob.glob('that_dir/*jpg'))print 时,它返回:

dog 1.jpg
dog 10.jpg
dog 11.jpg
dog 12.jpg
.
.
dog 8.jpg
dog 9.jpg

在这种情况下,有没有办法让它按dog 1.jpg, dog 2.jpg .. dog 12.jpg 的顺序返回? 还是完全避免这种编号方法并改用前导零之类的方法更明智?

【问题讨论】:

  • 使用 sorted(glob.glob('that_dir/*jpg'), key = lambda x: int(x[4:].split('.')[0]))
  • 我认为您要查找的内容称为“自然排序”-如果您使用该术语进行搜索,您应该会找到很多。但是添加前导零是快速简便的解决方案。
  • 嘿,谢谢马克!就是这样!我以前从未听说过这个词,所以这对我来说是新事物!

标签: python python-3.x glob


【解决方案1】:

一种使用distutils.version.LooseVersion的方式:

from distutils.version import LooseVersion

l = ['dog 12.jpg', 'dog 1.jpg', 'dog 11.jpg', 
     'dog 2.jpg', 'dog 3.jpg', 'dog 10.jpg']

sorted(l, key=LooseVersion)

输出:

['dog 1.jpg',
 'dog 2.jpg',
 'dog 3.jpg',
 'dog 10.jpg',
 'dog 11.jpg',
 'dog 12.jpg']

【讨论】:

    猜你喜欢
    • 2015-02-24
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 2016-10-12
    • 2018-04-04
    • 1970-01-01
    • 2017-12-15
    • 1970-01-01
    相关资源
    最近更新 更多