2012-12-30 13 views
19

Próbuję uzyskać klucz Dict, gdzie jego wartość jest maksymalna we wszystkich wartościach dyktowanych. Znalazłem dwa sposoby, oba nie wystarczająco eleganckie.Pobierz klucz dict o wartości maksymalnej

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] 

Czy istnieje lepsze podejście?

Odpowiedz

57

Użyj key parametrem max():

max(d, key=d.get) 

Demo:

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

Parametr key wykonuje funkcję, a dla każdego wpisu w iterable, to będzie znaleźć taki, dla którego funkcja key zwraca najwyższą wartość.

+0

Co zrobić, jeśli istnieje wiele kluczy? Czy mogę przekazać, powiedzmy, "len", aby uzyskać najdłuższy klucz o największej wartości? – SiddharthaRT

+0

@SiddharthaRT: możesz użyć 'lambda' dla klucza:' max (d, klucz = lamda k: (d [k], len (k))) 'zwróci klucz o najwyższej wartości, a jeśli nie jest więcej niż jednym kluczem, będzie to najdłuższy klucz z tych, które są zwracane. –

Powiązane problemy