2015-05-31 3 views
1

Я использую Python 2.7 и у меня есть этот список:Сортировка списка и Dict ключи

photos = ['arthur20.jpg', 'arthur7.jpg', 'arthur11.jpg', 'arthur3.jpg', 'arthur5.jpg', 'arthur17.jpg', 'arthur15.jpg', 'arthur2.jpg', 'arthur13.jpg', 'arthur8.jpg', 'arthur9.jpg', 'arthur18.jpg', 'arthur4.jpg', 'arthur6.jpg', 'arthur10.jpg', 'arthur12.jpg', 'arthur14.jpg', 'arthur19.jpg', 'arthur16.jpg', 'arthur1.jpg'] 

Как я могу организовать этот список? Я пытался использовать sort(), но он не работает, он вернулся мне это:

['arthur1.jpg', 'arthur10.jpg', 'arthur11.jpg', 'arthur12.jpg', 'arthur13.jpg', 'arthur14.jpg', 'arthur15.jpg', 'arthur16.jpg', 'arthur17.jpg', 'arthur18.jpg', 'arthur19.jpg', 'arthur2.jpg', 'arthur20.jpg', 'arthur3.jpg', 'arthur4.jpg', 'arthur5.jpg', 'arthur6.jpg', 'arthur7.jpg', 'arthur8.jpg', 'arthur9.jpg'] 

, а также строки из списка будут ключи к Dict, и я должен положить ключи в порядке тоже, как это :

dict = {"arthur1.jpg":1, "arthur2.jpg":2 ...} 
+0

Хотя принятый ответ делает это ясным неявным образом - этот вопрос выиграет от расширения «это не сработало» - каким образом это не сработало? Упрощенный список входных данных и порядок, который он отсортировал, уточнят это и сделают какой-то способ сделать [минимальный, полный и проверяемый пример] (http://stackoverflow.com/help/mcve) –

+0

Ой, прости, я буду будьте внимательнее. Причина этого не в том, что когда я использую функцию sort() для своих «фотографий», имена все равно не будут в порядке: ["arthur10.jpg", "arthur8.jpg", "arthur7.jpg" , "arthur6.jpg", "arthur5.jpg", "arthur20.jpg", arthur19.jpg "," arthur18.jpg "," arthur17.jpg "...]. В списке будут сегменты. – arthurckl

+0

Да, я понимаю, что порядок, который вы видите, лексикографичен, поэтому вы увидите, например, [arthur1 ',' arthur10 ',' arthur11 ',' arthur2 '...] после сортировки. Идея здесь заключается в том, что вы спрашиваете вопрос, который ясен будущим читателям и потенциальным респондентам - вот почему я предлагаю вам изменить, иначе вопрос может быть закрыт, поскольку он не соответствует этим критериям. Проверьте [как спросить] (http:// /stackoverflow.com/help/how-to-ask) для официальной линии по всему этому - я просто подобрал ваш вопрос через закрытую аудиторию с обзором голосов и подумал, что могу предложить небольшой совет. –

ответ

3

sort() бы отсортировать список в естественном порядке, в данном случае - лексикографическое упорядочение. Вы можете отсортировать его по номеру, указанному ниже "arthur", с помощью специальной функции сортировки. Самый простой способ сделать это, ИМХО, было бы извлечь номер, используя регулярное выражение:

import re 
photos.sort(key = lambda x : int(re.findall('\d+', x)[0])) 

После того, как у вас есть список отсортирован, создавая dict вы хотите это просто вопрос zip Инг:

from collections import OrderedDict 
dict = OrderedDict(zip(photos, range(1, len(photos) + 1))) 
2

Я думаю, что вы могли бы искать для natsort пакета, который обрабатывает эти более сложные сортировки, где обычное lexographic сорт и не будет работать, потому что длина чисел не нормирована.

>>> natsorted(['arthur20.jpg', 'arthur7.jpg', 'arthur11.jpg', 
       'arthur3.jpg', 'arthur5.jpg', 'arthur17.jpg', 
       'arthur15.jpg', 'arthur2.jpg', 'arthur13.jpg', 
       'arthur8.jpg', 'arthur9.jpg', 'arthur18.jpg', 
       'arthur4.jpg', 'arthur6.jpg', 'arthur10.jpg', 
       'arthur12.jpg', 'arthur14.jpg', 'arthur19.jpg', 
       'arthur16.jpg', 'arthur1.jpg']) 
['arthur1.jpg', 'arthur2.jpg', 'arthur3.jpg', 'arthur4.jpg', 
'arthur5.jpg', 'arthur6.jpg', 'arthur7.jpg', 'arthur8.jpg', 
'arthur9.jpg', 'arthur10.jpg', 'arthur11.jpg', 'arthur12.jpg',  
'arthur13.jpg', 'arthur14.jpg', 'arthur15.jpg', 'arthur16.jpg', 
'arthur17.jpg', 'arthur18.jpg', 'arthur19.jpg', 'arthur20.jpg'] 
1
import collections 

origdict = { 
     4: "four", 
     5: "five", 
     1: "one", 
     2: "two" 
    } 
od = collections.OrderedDict() 

for key in sorted(origdict.keys()): 
    od[key] = origdict[key] 

print od 
+0

Это понятный ответ для начинающих, таких как я – ytpillai

Смежные вопросы