ordenamiento por valor python

Supongamos que tengo un dict.

data = {1:'b', 2:'a'} 

Y quiero ordenar los datos por ‘b’ y ‘a’ para obtener el resultado

 'a','b' 

¿Cómo puedo hacer eso?
¿Algunas ideas?

Para obtener los valores de uso.

 sorted(data.values()) 

Para obtener las teclas correspondientes, use una función de key

 sorted(data, key=data.get) 

Para obtener una lista de tuplas ordenadas por valor

 sorted(data.items(), key=lambda x:x[1]) 

Relacionados: vea la discusión aquí: los diccionarios se ordenan en Python 3.6+

Si realmente desea ordenar el diccionario en lugar de simplemente obtener una lista ordenada, utilice collections.OrderedDict

 >>> from collections import OrderedDict >>> from operator import itemgetter >>> data = {1: 'b', 2: 'a'} >>> d = OrderedDict(sorted(data.items(), key=itemgetter(1))) >>> d OrderedDict([(2, 'a'), (1, 'b')]) >>> d.values() ['a', 'b'] 

Desde su comentario hasta la respuesta de gnibbler, diría que desea una lista de pares de valores-clave ordenados por valor:

 sorted(data.items(), key=lambda x:x[1]) 

Ordenar los valores:

 sorted(data.values()) 

devoluciones

 ['a','b'] 

Gracias por todas las respuestas. Todos ustedes son mis héroes 😉

Hizo al final algo como esto:

 d = sorted(data, key = d.get) for id in d: text = data[id] 

También creo que es importante tener en cuenta que el tipo de objeto dict Python es una tabla hash ( más sobre esto aquí ) y, por lo tanto, no se puede clasificar sin convertir sus claves / valores en listas. Lo que esto permite es una recuperación de elementos dictados en tiempo constante O(1) , sin importar el tamaño / número de elementos en un diccionario.

Dicho esto, una vez que ordena sus claves ( sorted(data.keys()) , o valores ( sorted(data.values()) , puede usar esa lista para acceder a claves / valores en patrones de diseño como estos:

 for sortedKey in sorted(dictionary): print dictionary[sortedKeY] # gives the values sorted by key for sortedValue in sorted(dictionary.values()): print sortedValue # gives the values sorted by value 

Espero que esto ayude.

En su comentario en respuesta a John, sugiere que desee las claves y los valores del diccionario, no solo los valores.

PEP 256 sugiere esto para clasificar un diccionario por valores.

 import operator sorted(d.iteritems(), key=operator.itemgetter(1)) 

Si quieres orden descendente, haz esto.

 sorted(d.iteritems(), key=itemgetter(1), reverse=True) 

método no lambda

 # sort dictionary by value d = {'a1': 'fsdfds', 'g5': 'aa3432ff', 'ca':'zz23432'} def getkeybyvalue(d,i): for k, v in d.items(): if v == i: return (k) sortvaluelist = sorted(d.values()) sortresult ={} for i1 in sortvaluelist: key = getkeybyvalue(d,i1) sortresult[key] = i1 print ('=====sort by value=====') print (sortresult) print ('=======================') 

Podría crear una lista ordenada a partir de valores y reconstruir el diccionario:

 myDictionary={"two":"2", "one":"1", "five":"5", "1four":"4"} newDictionary={} sortedList=sorted(myDictionary.values()) for sortedKey in sortedList: for key, value in myDictionary.items(): if value==sortedKey: newDictionary[key]=value 

Salida: newDictionary = {‘one’: ‘1’, ‘two’: ‘2’, ‘1four’: ‘4’, ‘five’: ‘5’}