Cómo ordenar el diccionario por clave en orden numérico Python

Aquí está el diccionario que parece:

{'57481': 50, '57480': 89, '57483': 110, '57482': 18, '57485': 82, '57484': 40} 

Me gustaría ordenar el diccionario en orden numérico, el resultado debería ser:

 {'57480': 89, '57481': 50, '57482': 18, '57483': 110, '57484': 40, '57485': 82} 

Intenté sorted(self.docs_info.items) pero no funciona.

Si solo necesita ordenar por clave, ya está 95% allí. Suponiendo que su diccionario parece llamarse docs_info :

 for key, value in sorted(docs_info.items()): # Note the () after items! print(key, value) 

Dado que las claves del diccionario son siempre únicas, las llamadas sorted en docs_info.items() (que es una secuencia de tuplas) son equivalentes a la clasificación solo por las claves.

¡Tenga en cuenta que las cadenas que contienen números se clasifican de forma no intuitiva! por ejemplo, "11" es “más pequeño” que "2" . Si los necesita ordenados numéricamente, recomiendo hacer las teclas int lugar de str ; p.ej

 int_docs_info = {int(k) : v for k, v in docss_info.items()} 

Por supuesto, esto solo cambia el orden en el que accedes a los elementos del diccionario, lo que suele ser suficiente (ya que si no lo estás accediendo, ¿qué importa si está ordenado?). Si, por algún motivo, necesita que el dictado esté “ordenado”, tendrá que usar collections.OrderedDict , que recuerda el orden en el que se insertaron los elementos . Entonces, primero puede ordenar su diccionario (como se OrderedDict arriba) y luego crear un OrderedDict partir de los pares ordenados (clave, valor):

 sorted_docs_info = collections.OrderedDict(sorted(docs_info.items())) 

Los dictados de Python estándar están “desordenados”. Puedes usar un OrderedDict , mira los documentos :

 from collections import OrderedDict d = {'57481': 50, '57480': 89, '57483': 110, '57482': 18, '57485': 82, '57484': 40} OrderedDict(sorted(d.items(), key=lambda t: t[0])) # OrderedDict([('57480', 89), ('57481', 50), ('57482', 18), ('57483', 110), ('57484', 40), ('57485', 82)]) 

Si ordenar los elementos repetidamente e insertarlos en un dictado ordenado es demasiado lento, considere una de las implementaciones de dictados ordenados en PyPI. Un tipo de datos SortedDict mantiene eficientemente sus claves en orden ordenado. El módulo sortedcontainers contiene una de estas implementaciones.

La instalación desde PyPI es fácil:

 pip install sortedcontainers 

Si no puede pip install sencilla, simplemente copie los archivos sortedlist.py y sorteddict.py del repository de código abierto . SortedContainers se implementa en pure-Python pero es una implementación rápida como C.

Una vez instalado simplemente:

 In [1]: from sortedcontainers import SortedDict In [6]: SortedDict({'57481': 50, '57480': 89, '57483': 110, '57482': 18, '57485': 82, '57484': 40}) Out[6]: SortedDict({'57480': 89, '57481': 50, '57482': 18, '57483': 110, '57484': 40, '57485': 82}) 

El módulo de contenedores ordenados también mantiene una comparación de rendimiento de varias implementaciones populares.