Python : Mengurutkan kamus dengan menggunakan kunci dalam urutan menaik

Saya memiliki kamus berikut dan saya ingin mengurutkannya secara menaik menggunakan tombol.

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

Saya mencoba menggunakan:

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

Bagaimana saya bisa mendapatkan:

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

person user3018319    schedule 21.11.2013    source sumber


Jawaban (2)


Untuk kasus spesifik Anda, ini bisa berhasil:

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

Mengapa? karena semua kunci Anda dimulai dengan 'anim' dan kemudian memiliki nomor...

Saya menggunakan konversi ke int() untuk perilaku pengurutan berdasarkan nomor.

person Daren Thomas    schedule 21.11.2013
comment
Perhatikan bahwa ini tidak ada hubungannya dengan kamus, dan hanya berkaitan dengan fakta bahwa str(10) < str(2), tetapi int(10) > int(2). - person colcarroll; 21.11.2013
comment
@JLLagrange, poin bagus. Terkadang menunjukkan hal yang sudah jelas harus menjadi hal pertama yang harus dilakukan! terima kasih. - person Daren Thomas; 21.11.2013

Anda hanya perlu membagi kunci dan mengurutkannya berdasarkan nilai integer bagian bilangan, seperti ini

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

Keluaran

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