Hola!
Como dice el titulo, necesito ordenar("sortear"?) un diccionario.
Tengo un diccionario que contiene las letras del alfabeto en minuscula y sus valores ascii; el par "clave-valor" seria: (letra: CodAscii)
El diccionario lo defino de esta forma(para no anotar letra por letra :xD):
from string import letters
let = {}
for x in letters[26:52]: #letters[26:52] es la parte que contiene las letras minusculas
let[x] = ord(x)
del letters
Cuando lo genero, me queda asi:
>>>let
{'a': 97, 'c': 99, 'b': 98, 'e': 101, 'd': 100, 'g': 103, 'f': 102, 'i': 105, 'h': 104, 'k': 107, 'j': 106, 'm': 109, 'l': 108, 'o': 111, 'n': 110, 'q': 113, 'p': 112, 's': 115, 'r': 114, 'u': 117, 't': 116, 'w': 119, 'v': 118, 'y': 121, 'x': 120, 'z': 122}
Yo lo que quiero es que quede todo el diccionario ordenado(a,b,c,d,e,f....v,w,x,y,z) en vez de tenerlo asi(a,c,b,e,d....w,v,y,x,z)
___________________________________________________________________
He buscado en gugol, y encontre este codigo(lo encontre aqui (http://code.activestate.com/recipes/52306/))
def sortedDictValues1(adict):
items = adict.items()
items.sort()
return [value for key, value in items]
y me genera una lista ordenada, hasta aca todo bien(la lista esta ordenada), pero luego si la convierto a diccionario(perdonen el nombre de las variables :rolleyes:)
>>>l = sortedDictValues1(let)
>>>for i in l:
x[chr(i)] = i
>>>x
{'a': 97, 'c': 99, 'b': 98, 'e': 101, 'd': 100, 'g': 103, 'f': 102, 'i': 105, 'h': 104, 'k': 107, 'j': 106, 'm': 109, 'l': 108, 'o': 111, 'n': 110, 'q': 113, 'p': 112, 's': 115, 'r': 114, 'u': 117, 't': 116, 'w': 119, 'v': 118, 'y': 121, 'x': 120, 'z': 122}
Alguien sabe porque pasa esto? y si hay alguna cosa que estoy haciendo mal, o es algo de python(uso Python 2.66 por las dudas)?
Saludos! y gracias por adelantado
El problema es que no es posible ordenar un diccionario, lo único que puedes hacer es imprimir u obtener una representación de como quedaría ordenado, pero el objeto en si no se puede ordenar.
Por cierto, no se lo que intentas hacer pero, no es mejor esto?
print ord("a")
print chr(97)
Saludos
Hola!
Gracias por responder Novlucker, si no se puede, no se puede xD
_______________________________________________________________________
Por cierto, lo que intentaba hacer con ese diccionario era implementar el Cifrado Cesar en Python :xD.
El diccionario lo usaba para controlar los "límites" de los caracteres, para que no tomara ningun valor fuera del rango "a-z"
Saludos!
Pero eso lo puedes hacer con comparaciones a secas :P
print "a">"b"
print "c"<"z"
Por lo cual puedes convertir a enteros con ORD, y luego verificar si es mayor a "z" con CHR
Saludos
Es cierto, no lo había pensado de esa forma :xD
La duda ya esta resuelta, ya pueden cerrar si quieren :D
Saludos! y gracias de vuelta por responder =P
hola, veo que este hilo es antiguo pero he llegado a él consultando la misma duda en algún buscador famoso.
También he dado con un hilo más moderno de otro foro, que resuelve así:
import operator
miDic={"a":2, "b":3, "d":1, "c":1}
resultado = sorted(miDic.items(), key=operator.itemgetter(0))
print resultado
[('a', 2), ('b', 3), ('c', 1), ('d', 1)]
El caso es que devuelve el resultado como lista (si no lo entiendo mal). Me pregunto si habría manera de que devolviera un nuevo diccionario.