3 votes

Retourner la valeur maximale d'un dictionnaire

Je veux retourner la valeur maximale et sa clé à partir d'un dictionnaire, et je sais que quelque chose comme ce qui suit devrait faire l'affaire

max(list.iteritems(), key=operator.itemgetter(1))

Cependant, si la valeur maximale d'un dictionnaire est de 6 et que plusieurs clés ont la même valeur, il renverra toujours la première ! Comment puis-je faire en sorte qu'il renvoie toutes les clés qui ont le nombre maximal de 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}

13voto

RomanPerekhrest Points 54365

La solution passe par la compréhension des listes :

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]

1voto

CommuSoft Points 6439

Vous pouvez d'abord déterminer le maximum avec :

maximum = max(dic.values())

et ensuite filter sur la base 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 voulez présenter le liste de clés sont une belle liste 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)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X