2011-09-07 6 views
20

Duplicar posibles:
Python: Sort a dictionary by valuevalores de clasificación y la lista de entrega de las llaves de pitón dict

tengo un diccionario de esta manera:

A = {'Name1':34, 'Name2': 12, 'Name6': 46,....} 

Quiero una lista de claves clasificadas por los valores, es decir, [Name2, Name1, Name6....]

Gracias !!!

+0

gracias por la @Felix consejos, pero me han buscado antes de que yo pedí y las respuestas no son lo que necesito. – Alejandro

+3

Tengo que estar en desacuerdo, hay muchas preguntas similares con la respuesta que está buscando. P.ej. la segunda respuesta más votada en la pregunta a la que me he vinculado proporciona la misma solución que la respuesta más votada aquí o p. [estas respuestas] (http://stackoverflow.com/questions/3417760/how-to-sort-a-python-dict-by-value). Puede que tengas que probar algunas cosas, pero la pregunta definitivamente ya estaba aquí. –

+0

"las respuestas no son lo que necesito". Una declaración inútil. ¿Qué falta en las respuestas existentes? ** ¿Cómo ** están incompletos o son engañosos? ** ¿Qué hace que su pregunta sea única? Por favor sea especifico**. –

Respuesta

30

Uso sorted con el método get como clave (claves de diccionario se puede acceder por iterating):

sorted(A, key=A.get) 
+4

Esto es incorrecto ya que solo ordenará las claves, no las clasificará por sus valores. –

+1

pero esto, devuelve una lista ordenada por claves. Necesito una lista de claves ordenadas por valores. :) – Alejandro

+2

@David Wolever Oops, tienes toda la razón. Fijo. – phihag

1

que haría uso:

items = dict.items() 
items.sort(key=lambda item: (item[1], item[0])) 
sorted_keys = [ item[0] for item in items ] 

El argumento key para ordenar es un exigible que devuelve la clave de clasificación para usar. En este caso, estoy devolviendo una tupla de (value, key), pero puede devolver el valor (es decir, key=lambda item: item[1]) si lo desea.

+0

La otra solución es más simple y más fácil de leer para mí. –

2

sorted(a.keys(), key=a.get)

Esto clasifica las llaves, y para cada tecla, utiliza a.get para encontrar el valor a utilizar como su valor de ordenación.

+0

Tenga en cuenta que no es necesario utilizar 'a.keys', que hace una lista de las claves. 'a' (o' a.iterkeys() ') ya es iterable sobre las teclas del dict a. –

+1

Sí, sé que no es necesario, pero creo que se lee mejor. Pienso en dicts como contenedores de pares, no como contenedores de llaves. –

4

Uso sorted 's key argumento

sorted(d, key=d.get) 
Cuestiones relacionadas