J'ai un dict qui ressemble à ceci
{ "keyword1":3 , "keyword2":1 , "keyword3":5 , "keyword4":2 }
Et je voudrais convertir DESC et créer une liste de seulement les mots-clés. Par exemple, cela reviendrait
["keyword3" , "keyword1" , "keyword4" , "keyword2"]
Tous les exemples que j'ai trouvés utilisent lambda et je ne suis pas très fort avec ça. Existe-t-il un moyen de passer en revue ceci et de les trier au fur et à mesure ? Merci pour toutes les suggestions.
PS: Je pourrais créer le dict initial de manière différente si cela pouvait aider.
Vous pourriez utiliser
res = list(sorted(theDict, key=theDict.__getitem__, reverse=True))
(Vous n'avez pas besoin de list
dans Python 2.x)
Le theDict.__getitem__
est en fait équivalent à lambda x: theDict[x]
.
(Un lambda n’est qu’une fonction anonyme. Par exemple
>>> g = lambda x: x + 5
>>> g(123)
128
Ceci est équivalent à
>>> def h(x):
... return x + 5
>>> h(123)
128
)
>>> d={ "keyword1":3 , "keyword2":1 , "keyword3":5 , "keyword4":2 }
>>> sorted(d, key=d.get, reverse=True)
['keyword3', 'keyword1', 'keyword4', 'keyword2']
je l'ai toujours fait de cette façon .... Y a-t-il des avantages à utiliser la méthode triée?
keys = dict.keys()
keys.sort( lambda x,y: cmp(dict[x], dict[y]) )
whoops n'a pas lu la partie sur le fait de ne pas utiliser lambda = (
Je proposerais quelque chose comme ça:
[k for v, k in sorted(((v, k) for k, v in theDict.items()), reverse=True)]
Mais La solution de KennyTM est beaucoup plus agréable :)
Il n'est pas possible de trier un dict, mais uniquement d'obtenir une représentation d'un dict qui est trié. Les dictus sont par nature moins ordonnés, mais d'autres types, tels que les listes et les n-uplets, ne le sont pas. Vous avez donc besoin d'une représentation triée, qui sera une liste - probablement une liste de n-uplets. Par exemple,
'''
Sort the dictionary by score. if the score is same then sort them by name
{
'Rahul' : {score : 75}
'Suhas' : {score : 95}
'Vanita' : {score : 56}
'Dinesh' : {score : 78}
'Anil' : {score : 69}
'Anup' : {score : 95}
}
'''
import operator
x={'Rahul' : {'score' : 75},'Suhas' : {'score' : 95},'Vanita' : {'score' : 56},
'Dinesh' : {'score' : 78},'Anil' : {'score' : 69},'Anup' : {'score' : 95}
}
sorted_x = sorted(x.iteritems(), key=operator.itemgetter(1))
print sorted_x
sortie:
[('Vanita', {'score': 56}), ('Anil', {'score': 69}), ('Rahul', {'score': 75}), ('Dinesh', {'score': 78}), ('Anup', {'score': 95}), ('Suhas', {'score': 95})]