Tengo un dict que se parece a esto
{ "keyword1":3 , "keyword2":1 , "keyword3":5 , "keyword4":2 }
Y me gustaría convertirlo en DESC y crear una lista de solo las palabras clave. Por ejemplo, esto volvería
["keyword3" , "keyword1" , "keyword4" , "keyword2"]
Todos los ejemplos que encontré usan lambda y no soy muy fuerte con eso. ¿Hay alguna manera de que pueda pasar por esto y ordenarlas a medida que avanzo ? Gracias por cualquier sugerencia.
PS: Podría crear el dictado inicial de forma diferente si ayudara.
Usted podría usar
res = list(sorted(theDict, key=theDict.__getitem__, reverse=True))
(No necesitas la list
en Python 2.x)
theDict.__getitem__
es en realidad equivalente a lambda x: theDict[x]
.
(Un lambda es solo una función anónima. Por ejemplo
>>> g = lambda x: x + 5 >>> g(123) 128
Esto es equivalente a
>>> 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']
Siempre lo hice de esta manera … ¿existen ventajas al usar el método ordenado?
keys = dict.keys() keys.sort( lambda x,y: cmp(dict[x], dict[y]) )
whoops no leyó la parte sobre no usar lambda = (
Se me ocurriría algo como esto:
[k for v, k in sorted(((v, k) for k, v in theDict.items()), reverse=True)]
Pero la solución de KennyTM es mucho mejor 🙂
No es posible ordenar un dict, solo obtener una representación de un dict que está ordenado. Los dictados son intrínsecamente ordenados menos, pero otros tipos, como listas y tuplas, no lo son. Por lo tanto, necesita una representación ordenada, que será una lista, probablemente una lista de tuplas. Por ejemplo,
''' 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
salida:
[('Vanita', {'score': 56}), ('Anil', {'score': 69}), ('Rahul', {'score': 75}), ('Dinesh', {'score': 78}), ('Anup', {'score': 95}), ('Suhas', {'score': 95})]