Merci d'avance pour votre aide.
J'ai construit le code suivant (j'ai essayé ci-dessous, j'ai utilisé un dictionnaire dans un dictionnaire).
brown male black
Comme vous peut voir, j'ai utilisé dans mon code:
maximun_key=max(character.items(), key=operator.itemgetter(1))[0]
Obtenir comme sortie:
import operator character = {'eyes_color':{"blue":10,"brown":12}, 'hair_color':{"black":15, "blonde":7}, 'gender': {"male":16,"female":6} } maximun_key=max(character.items(), key=operator.itemgetter(1))[0]
c'est-à-dire le maximum, mais pour chaque dictionnaire .
J'attendais pour ce cas une sortie comme:
homme
Je veux dire les clés avec des valeurs maximales.
Quelqu'un sait-il comment je peux résoudre ce problème?
4 Réponses :
De manière simple avec des fonctionnalités intégrées:
d = {'eyes_color': {"blue": 10, "brown": 12}, 'hair_color': {"black": 15, "blonde": 7}, 'gender': {"male": 16, "female": 6} } max_value, max_key = max(((v,k) for inner_d in d.values() for k,v in inner_d.items())) print(max_key) # male print(max_value) # 16
Utilisez le code ci-dessous pour obtenir le résultat: -
male
Sortie
import numpy as np key_list, value_list = [], [] character = {'eyes_color':{"blue":10,"brown":12}, 'hair_color':{"black":15, "blonde":7}, 'gender': {"male":16,"female":6} } for var in character.values(): for i in var : key_list.append(i) value_list.append(var[i]) max_index = np.argmax(value_list) #Getting index of maximum value result = key_list[max_index] #Getting result with the help of index value. print(result)
Vous pouvez également le faire en utilisant map
et functools.partial
.
>>> from operator import itemgetter >>> from functools import partial >>> character = {'eyes_color':{"blue":10,"brown":12}, 'hair_color':{"black":15, "blonde":7}, 'gender': {"male":16,"female":6}} >>> vmax = partial(max, key=itemgetter(1)) >>> max(map(vmax, map(dict.items, character.values())))[0] male
Cela utilise partial pour créer une fonction max réutilisable avec une clé personnalisée, puis mappez simplement dict.items
à chaque sous-dict, et le max à cela alors juste obtenez le maximum de ces résultats.
vmax = partial(max, key=itemgetter(1)) vmax(map(vmax, map(dict.items, character.values())))[0]
Une autre manière -
Utilisation de lambda
:
from operator import itemgetter character = {'eyes_color':{"blue":10,"brown":12}, 'hair_color':{"black":15, "blonde":7}, 'gender': {"male":16,"female":6} } maximun_key= max([max(chars.items(),key=itemgetter(1)) for chars in character.values()],key=itemgetter(1))[0]
Utilisation de operator.itemgetter
:
character = {'eyes_color':{"blue":10,"brown":12}, 'hair_color':{"black":15, "blonde":7}, 'gender': {"male":16,"female":6} } maximun_key= max([max(chars.items(),key = lambda x: x[1]) for chars in character.values()],key = lambda x: x[1])[0]
Ce n'est certainement pas ce que l'op demandait, il peut arriver avec un homme, mais c'est parce que max ('male', 'female') == 'male'
Vous comparez chaque sous-clé lexicographiquement . Essayez de changer les valeurs pour que le résultat soit féminin et qu'il affiche toujours «masculin». Essayez même de changer l'une des clés eye_color en 'zed'
et la sortie sera zed.
Merci, vous avez raison @Jab. Mon intention était d'abord de trouver l'élément maximum de chaque élément de 'eyes_color', 'hair_color', 'gender'
. Ensuite, trouvez à nouveau l'élément maximum de cette liste. J'ai modifié le code en conséquence.