2012-12-30 15 views
19

Sto cercando di ottenere la chiave dict in cui il valore è max in tutti i valori di dict. Ho trovato due modi, entrambi non abbastanza eleganti.Ottieni la chiave dict dal valore massimo

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] 

C'è un approccio migliore?

risposta

57

Utilizzare il key parametro per max():

max(d, key=d.get) 

Demo:

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

Il parametro key prende una funzione, e per ogni voce nella iterabile, che troveremo quello per il quale la funzione key restituisce il valore più alto.

+0

Cosa succede se ci sono più chiavi? Posso passare, ad esempio, 'len' per ottenere la chiave più lunga con il maggior valore? – SiddharthaRT

+0

@SiddharthaRT: puoi usare un 'lambda' per la chiave:' max (d, chiave = lamda k: (d [k], len (k))) 'restituirà la chiave con il valore più alto, e se ci è più di una di queste chiavi, sarà la chiave più lunga di quelle restituite. –

Problemi correlati