Je veux renvoyer la valeur maximale et sa clé à partir d'un dictionnaire, et je sais que quelque chose comme le suivant devrait faire l'affaire
max(list.iteritems(), key=operator.itemgetter(1))
Cependant dans le cas où la valeur maximale dans un dictionnaire est 6 et il arrive que plusieurs clés aient la même valeur .. il retournera toujours la première! comment puis-je lui faire retourner toutes les clés qui ont le nombre maximum comme valeurs avec la valeur. Voici un exemple de dictionnaire avec la même valeur maximale:
dic={0: 1.4984074067880424, 1: 1.0984074067880423, 2: 1.8984074067880425, 3: 2.2984074067880425, 4: 2.2984074067880425}
La solution utilisant la compréhension de liste:
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)
Le résultat:
2.2984074067880425 [3, 4]
Vous pouvez d'abord déterminer le maximum avec:
maximum = max(dic.values())
puis filter
en fonction de la valeur maximale:
result = filter(lambda x:x[1] == maximum,dic.items())
Exemple dans la ligne de commande:
$ 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)]
Étant donné que vous souhaitez présenter la liste des clés sont une liste de Nice et la valeur, vous pouvez définir une fonction:
def maximum_keys(dic):
maximum = max(dic.values())
keys = filter(lambda x:dic[x] == maximum,dic.keys())
return keys,maximum
qui renvoie un Tuple contenant la liste des clés et la valeur maximale:
>>> maximum_keys(dic)
([3, 4], 2.2984074067880425)