valor una sort recorrer por ordenar operaciones lista las ejemplo dict diccionarios diccionario con como claves buscar python dictionary python-2.6

una - ordenar dict por valor python



ordenar una lista en python sin sort (9)

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?


Desde tu comentario a la respuesta de gnibbler, diría que quieres una lista de pares de clave-valor ordenados por valor:

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


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 un orden descendente, haz esto

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


Gracias por todas las respuestas. Eres todo mi héroe ;-)

Hizo al final algo como esto:

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


Ordenar los valores:

sorted(data.values())

devoluciones

[''a'',''b'']


Para obtener los valores use

sorted(data.values())

Para obtener las claves correspondientes, use una función key

sorted(data, key=data.get)

Para obtener una lista de tuplas ordenadas por valor

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

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


Puede crear una lista ordenada 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''}


Si realmente desea ordenar el diccionario en lugar de solo obtener una lista ordenada, use 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'']


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 puede ser ordenada sin convertir sus claves / valores a listas. Lo que esto permite es la recuperación de elementos dict en tiempo constante O(1) , sin importar el tamaño / número de elementos en un diccionario.

Habiendo dicho eso, una vez que sorted(data.keys()) sus claves - sorted(data.keys()) , o valores - sorted(data.values()) , puede usar esa lista para acceder a las 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.


sin método 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 (''======================='')