Quiero devolver el valor máximo y su clave de un diccionario, y sé que algo como lo siguiente debería funcionar
max(list.iteritems(), key=operator.itemgetter(1))Sin embargo, en caso de que el valor máximo en un diccionario sea 6 y suceda que varias claves tengan el mismo valor... ¡siempre devolverá la primera! ¿Cómo puedo hacer que devuelva todas las claves que tienen el número máximo como valores junto con el valor? Aquí hay un ejemplo de un diccionario con el mismo valor máximo:
dic={0: 1.4984074067880424, 1: 1.0984074067880423, 2: 1.8984074067880425, 3: 2.2984074067880425, 4: 2.2984074067880425}La solución usando la lista de comprensión:
dic={0: 1.4984074067880424, 1: 1.0984074067880423, 2: 1.8984074067880425, 3: 2.2984074067880425, 4: 2.2984074067880425} max_value = max(dic.values()) # maximum value max_keys = [k for k, v in dic.items() if v == max_value] # getting all keys containing the `maximum` print(max_value, max_keys)La salida:
2.2984074067880425 [3, 4]Primero puede determinar el máximo con:
maximum = max(dic.values()) y luego filter según el valor máximo:
result = filter(lambda x:x[1] == maximum,dic.items())Ejemplo en la línea de comando:
$ python2 Python 2.7.12 (default, Nov 19 2016, 06:48:10) [GCC 5.4.0 20160609] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> dic={0: 1.4984074067880424, 1: 1.0984074067880423, 2: 1.8984074067880425, 3: 2.2984074067880425, 4: 2.2984074067880425} >>> maximum=max(dic.values()) >>> maximum 2.2984074067880425 >>> result = filter(lambda x:x[1] == maximum,dic.items()) >>> result [(3, 2.2984074067880425), (4, 2.2984074067880425)]Dado que desea presentar la lista de claves que son una buena lista y el valor, puede definir una función:
def maximum_keys(dic): maximum = max(dic.values()) keys = filter(lambda x:dic[x] == maximum,dic.keys()) return keys,maximumque devuelve una tupla que contiene la lista de claves y el valor máximo:
>>> maximum_keys(dic) ([3, 4], 2.2984074067880425)