2015-03-24 27 views
5

Aşağıdaki sözlükleri vardır:Sıralama

mydict1 = {1: 11, 2: 4, 5: 1, 6: 1} 
mydict2 = {1: 1, 5: 1} 
I (azalan) değerleriyle ilk sıralama istiyorum bunların her biri için

ve sonra

out_dict1 = [((1, 11), (2, 4), (5, 1), (6, 1)] 
out_dict2 = [(1, 1), (5, 1)] 

bunu yapmanın yolu nedir: tuşları (ascendingly), bu çıktıyı veren?

bunu kullandım ama yukarıdaki iki durum için sürekli bir sonuç elde edemez:

sorted(mydict.items(), key=lambda x: (x[1],x[0])) 
+0

tüm anahtarlar ve değerler daima sayılar olması garanti var mı? Öyleyse, @foureye'ın çözümü en basit olanıdır. Değilse, biraz ekstra gerek ... Python onun tür garanti ediliyor sayesinde etkinleştirmek yapar hangi ** istikrarlı ** ... –

cevap

7

sadece key parametresine geçirilen işlevi değerlerin değerini inkar, azalan değerleri sıralamak istiyorsanız bu yana Şimdi bu

sorted(mydict.items(), key=lambda x: (-x[1], x[0])) 

gibi, değerler azalan düzende sıralanmış edilecek ve iki değer eşitse, anahtarlar olarak kabul edilecek ve artan sırada sıralanacaktır.

+0

Sadece günlerce bakmaya çalışıyorum sahip çıkanlardır. Ve bugün lambda OMG hakkında çok iyi olduklarını öğrendim. – StackPointer