2011-03-08 25 views
16
a = dict(((1,3),(0,-1),(3,21))) 
m = max(a, key=a.get) 

Birisi bana bunun neden maksimum değere karşılık gelen anahtarı döndürdüğüyle ilgili bir açıklama yapabilir mi? Beni bir süredir güldürdü. Teşekkürler! key parametre nasıl çalıştığınıanahtar

cevap

23

Sözlük "a", python'da yinelenebilir bir yapıdır. for x in a ile döngü yaptığınızda, sözlüğündeki tuşların üzerinden geçiyorsunuz. İkinci satırda

, maksimum işlevi, iki bağımsız değişkenleri alır: bir iterable bir amacı, (a) ve isteğe bağlı bir "anahtar" fonksiyonu. Anahtar işlevi, en büyük olanı iade edilecek olan öğelerin değerini değerlendirmek için kullanılacaktır.

Örnekler: Yalnızca "tuşları" çıkış olduğunu burada

>>> a = dict(((1,3),(0,-1),(3,21))) 
>>> for x in a: 
...  print x #output the value of each item in our iteration 
... 
0 
1 
3 

Not. Bu anahtarların her birini "al" a geçtiğimizde ... her bir anahtarın değerini alırız. Şimdi maks. Nasıl çalıştığını görün.

>>> b=[2, 3, 5, 6, 4] 
>>> max(b) 
6 
>>> def inverse(x): 
...  return 1.0/x 
... 
>>> max(b, key=inverse) 
2 

Gördüğünüz gibi, maksimum (varsayılan olarak) yinelenen listemizdeki en büyük sayıyı bulacaktır. "Ters" işlevini tanımlarsak, en büyük öğeyi inverse(item)'un en büyük olduğu b olarak döndürecektir.

bu iki öğe birleştirin ve biz max(a, key=a.get) a.get(item) değeri büyük olduğu a içinde item dönecek görüyoruz. yani en büyük değere karşılık gelen anahtar.

+0

Gerçekten ilgilenirseniz, bir lambda işlevi kullanmayı da deneyebilirsiniz: 'max (a, anahtar = lambda x: a [x])' – ProdigySim

1

Soruyor musun? Sözlükdeki her öğeye uygulanan bir satır alır. Sözlüğünüze durumunda, sadece bu yapar:

a.get(1) # 3 
a.get(0) # -1 
a.get(3) # 21 

max sonra karşılaştırma değeri gibi başlıca işlevinin sonucu kullanır, bu yüzden açıkçası en yüksek değeri döndürür elemanı, seçecektir yani 3.

İlgili konular