2012-12-30 12 views
19

Tüm dict değerlerinde değerinin maksimum olduğu yerde dict anahtar almaya çalışıyorum. İki yol buldum, her ikisi de yeterince zarif değil.Dikte anahtarını maksimum değere getirin

d= {'a':2,'b':5,'c':3} 
# 1st way 
print [k for k in d.keys() if d[k] == max(d.values())][0] 
# 2nd way 
print Counter(d).most_common(1)[0][0] 

Daha iyi bir yaklaşım var mı?

cevap

57

Kullanım key parametre max() için:

max(d, key=d.get) 

Demo:

>>> d= {'a':2,'b':5,'c':3} 
>>> max(d, key=d.get) 
'b' 

key parametresi bir işlev alır ve iterable her giriş için, bu için bir tane bulacaksınız key işlevi en yüksek değeri döndürür.

+0

Birden çok anahtar varsa ne olur? En uzun anahtarı en yüksek değerle elde etmek için "len" diyebilir miyim? – SiddharthaRT

+0

@SiddharthaRT: anahtar için 'lambda' kullanabilirsiniz:' max (d, anahtar = lamda k: (d [k], len (k))) 'en yüksek değere sahip anahtarı döndürür. Böyle bir anahtardan daha fazlası, geri gönderilenlerin en uzun anahtarı olacaktır. –

İlgili konular