如何按字母顺序对列表进行排序有利于数字

时间:2014-09-19 19:34:34

标签: python

我有一个文件列表,每个文件都以相机命名。在Mac上的Finder中,如果我按“名称”对它们进行排序,前三个按此顺序排序:

1D 5D 10D

但是,在另一个应用程序中,相同的文件列表如下所示:

10D 1D 5D

注意10D从列表的底部移动到顶部。我认为这是因为第二个应用程序更喜欢数字而不是字母。这就像是因为“0”是一个数字,它的位置比“D”高。

在Python中,我编写了一个接受文件夹的脚本,并将它们添加到列表中。但我需要按照第二个应用程序对它们进行排序的方式对列表进行排序,而不是Finder对它们进行排序的方式。我认为解决方案可能与sorted()函数和key参数有关,但除此之外我不知道该怎么做。

对于那些想要查看代码的人:

myList = ["1D", "5D", "10D"]
sorted(myList, key=theSolutionToMyProblem)
print myList
>>>["10D", "1D", "5D"]

如果我要离开,请告诉我。指出我正确的方向。

2 个答案:

答案 0 :(得分:2)

正如wnnmaw所指出的,您正在询问如何按Python的默认排序顺序对事物进行排序。

我认为您实际上的困惑在于您实际上并未查看排序结果:

myList = ["1D", "5D", "10D"]
sorted(myList, key=theSolutionToMyProblem)
print myList
>>>["10D", "1D", "5D"]

无论你使用什么theSolutionToMyProblem都不会产生任何影响。

sorted生成myList的已排序副本并将其返回,而不会以任何方式影响myList。您忽略该已排序的副本,并打印出myList

所以,你需要这样做:

mySortedList = sorted(myList)
print mySortedList

......或:

myList.sort()

答案 1 :(得分:1)

默认sorted()(或list.sort())返回值 第二个应用返回的内容

>>> lst = ["1D", "5D", "10D"]
>>> lst.sort()
>>> lst
['10D', '1D', '5D']