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 (''======================='')