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