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.