2014-09-19 2 views
-2

У меня есть список файлов, каждый из которых назван в честь камеры. В Finder на Mac, если я отсортировать их по «Name» первые три в следующем порядке:Как отсортировать список в алфавитном порядке ИЗБРАННОЕ №

1D 5D 10D

Однако в другом приложении, тот же список файлов сортируется как это:

10D 1D 5D

Обратите внимание на 10D перемещается от нижней к верхней части списка. Я думаю, это связано с тем, что второе приложение предпочитает номера над буквами. Это похоже на то, что «0» - это номер, который имеет более высокое размещение, чем «D».

В Python я написал сценарий, который принимает папку с файлами и добавляет их в список. Но мне нужно, чтобы список сортировался так же, как и второе приложение, а не то, как их сортирует. Я думаю, что решение может иметь отношение к функции sorted() и параметру key, но помимо этого я не уверен, что делать.

Для тех из вас, кто хочет видеть код:

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

Если я далеко, пожалуйста, скажите мне. Направьте меня в правильном направлении.

+1

Связанный: http://stackoverflow.com/q/442429 –

+0

Я не думаю, что это просто связанный, это точно такой же вопрос, за исключением ссылки на естественный порядок сортировки Finder, а не на Explorer. – abarnert

+0

Если вы действительно не хотите _exactly_ того, что Finder делает на конкретном компьютере, на котором вы работаете, вплоть до наименьшего причуда, а не только естественной сортировки вообще ... в этом случае я могу написать ответ, используя 'PyObjC', чтобы вызвать тот же CoreFoundation функции, которую использует Finder. – abarnert

ответ

1

по умолчанию sorted() (или list.sort()) Возвращаемое значение является, что второе приложение возвращает

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

Он уже это знает –

+0

Очевидно, нет, так как ОП почувствовал необходимость задать вопрос – wnnmaw

+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() 
Смежные вопросы