2012-09-13 6 views
8

Dato un dizionario d dove la coppia di valori chiave consiste di una stringa come chiave e un numero intero come valore, voglio stampare la stringa chiave in cui il valore è il massimo .Stampa la chiave del valore massimo in un dizionario in modo pironico

Ovviamente è possibile eseguire il loop su d.items(), memorizzare il massimo e la relativa chiave e emettere quest'ultimo dopo il ciclo for. Ma c'è un modo più "divinatorio" semplicemente utilizzando solo una funzione max costruire come

print max(...) 
+0

A seconda dell'uso del dict si potrebbe vuoi cambiare chiave e valore, avere il numero intero ha una chiave un dstring ha valore ... (Naturalmente puoi farlo se non usi mai la chiave stringa ...) –

+3

La chiave e il valore di swapping non * sono * una buona idea, perché i valori potrebbero non essere affatto unici ... – halloleo

risposta

16
print max(d.keys(), key=lambda x: d[x]) 

o anche più breve (da commentare):

print max(d, key=d.get) 
+6

come dire 'max (d, key = d.get)' – georg

+0

Entrambi sembrano funzionare! :-) Grazie per questo: ho il sospetto che Python potrebbe offrire un modo conciso per affrontare questo problema! - Per quanto riguarda entrambe le soluzioni, la seconda versione mi sembra più facile da ricordare. Ha qualche avvertimento sul primo? – halloleo

+0

@halloleo Non penso che lo faccia. 'keys()' è ridondante, 'get' è un metodo il cui comportamento differisce da' lambda' per gli elementi non presenti nel dict, cosa che in questo caso non si verificherà. –