Python: сортировка словаря по ключам в порядке возрастания

У меня есть следующий словарь, и я хочу упорядочить его по возрастанию с помощью клавиш.

animMeshes = { "anim 0" : 23, "anim 32": 4, "anim 21" : 5, "anim 2" : 66, "anim 11" : 7 , "anim 1" : 5}

Я пытался использовать:

for mesh,val in sorted(animMeshes.items(), key=lambda t: t[0]):
    print mesh

o/p :

anim 0
anim 1
anim 11
anim 2
anim 21
anim 32

Как я мог получить:

anim 0
anim 1
anim 2
anim 11
anim 21
anim 32

person user3018319    schedule 21.11.2013    source источник


Ответы (2)


Для вашего конкретного случая это может работать:

for mesh,val in sorted(animMeshes.items(), key=lambda t: int(t[0].split()[1])):
    print mesh

Почему? потому что все ваши ключи начинаются с «anim», а затем имеют номер...

Я использовал преобразование в int() для сортировки по числовому поведению.

person Daren Thomas    schedule 21.11.2013
comment
Обратите внимание, что это не имеет ничего общего с тем, что это словарь, а связано только с тем фактом, что str(10) < str(2), но int(10) > int(2). - person colcarroll; 21.11.2013
comment
@JLLagrange, хорошая мысль. Иногда нужно первым делом указать на очевидное! Спасибо. - person Daren Thomas; 21.11.2013

Вам просто нужно разделить ключ и отсортировать на основе целочисленного значения числовой части, например

for mesh, val in sorted(animMeshes.items(), key=lambda t: int(t[0].split()[1])):
    print mesh

Вывод

anim 0
anim 1
anim 2
anim 11
anim 21
anim 32
person thefourtheye    schedule 21.11.2013