¿Obtener clave con valor máximo en el diccionario?

Resuelto ricafeal asked hace 16 años • 29 respuestas

Tengo un diccionario donde las claves son cadenas y los valores son números enteros.

stats = {'a': 1, 'b': 3000, 'c': 0}

¿Cómo obtengo la clave con el valor máximo? En este caso lo es 'b'.


¿Existe un enfoque mejor que usar una lista intermedia con tuplas clave-valor invertidas?

inverse = [(value, key) for key, value in stats.items()]
print(max(inverse)[1])
ricafeal avatar Nov 06 '08 17:11 ricafeal
Aceptado
max(stats, key=stats.get)
A. Coady avatar Nov 11 '2008 06:11 A. Coady

Puedes usar operator.itemgetterpara eso:

import operator
stats = {'a': 1000, 'b': 3000, 'c': 100}
max(stats.iteritems(), key=operator.itemgetter(1))[0]

Y en lugar de crear una nueva lista en la memoria, utilice stats.iteritems(). El keyparámetro de la max()función es una función que calcula una clave que se utiliza para determinar cómo clasificar los elementos.

Tenga en cuenta que si tuviera otro par clave-valor 'd': 3000, este método solo devolverá uno de los dos aunque ambos tengan el valor máximo.

>>> import operator
>>> stats = {'a': 1000, 'b': 3000, 'c': 100, 'd': 3000}
>>> max(stats.iteritems(), key=operator.itemgetter(1))[0]
'b' 

Si usa Python3:

>>> max(stats.items(), key=operator.itemgetter(1))[0]
'b'
 avatar Nov 06 '2008 10:11