Cómo Ordenar un Diccionario en Python

La forma más rápida de ordenar un diccionario en Python es sorted() con una lambda:

ordenado = dict(sorted(precios.items(), key=lambda item: item[1]))

¿Cuándo necesitas esto?

Los diccionarios en Python no tienen un orden inherente, pero desde la versión 3.7 mantienen el orden de inserción. Necesitas ordenar un diccionario en Python cada vez que quieras mostrar un ranking, clasificar resultados o procesar datos en un orden específico. En esta guía aprenderás cómo hacerlo por claves y por valores.

Método 1: Ordenar un diccionario por claves

Para ordenar un diccionario en Python por claves, usa sorted() y reconstruye el diccionario con una comprensión.

precios = {"pera": 3, "manzana": 1, "naranja": 2}
ordenado = {k: precios[k] for k in sorted(precios)}
print(ordenado)
# {'manzana': 1, 'naranja': 2, 'pera': 3}

Método 2: Ordenar por valores con sorted() y lambda

Para ordenar por valores, usa key=lambda item: item[1].

precios = {"pera": 3, "manzana": 1, "naranja": 2}
ordenado = dict(sorted(precios.items(), key=lambda item: item[1]))
print(ordenado)
# {'manzana': 1, 'naranja': 2, 'pera': 3}

El método items() devuelve pares de clave y valor. La lambda le indica a sorted() qué parte del par usar como clave de ordenamiento.

Método 3: Usar itemgetter en lugar de lambda

La función operator.itemgetter es más rápida y más legible cuando necesitas ordenar por una posición específica.

from operator import itemgetter

precios = {"pera": 3, "manzana": 1, "naranja": 2}
ordenado = dict(sorted(precios.items(), key=itemgetter(1)))
print(ordenado)

Método 4: Orden inverso y listas de diccionarios

Agrega el argumento reverse=True para ordenar de mayor a menor.

precios = {"pera": 3, "manzana": 1, "naranja": 2}
ordenado = dict(sorted(precios.items(), key=lambda item: item[1], reverse=True))
print(ordenado)
# {'pera': 3, 'naranja': 2, 'manzana': 1}

Un caso muy común es ordenar una lista de diccionarios por una de sus claves.

usuarios = [
    {"nombre": "Ana", "edad": 25},
    {"nombre": "Luis", "edad": 19},
    {"nombre": "Carla", "edad": 30},
]
ordenado = sorted(usuarios, key=lambda u: u["edad"])
print(ordenado)

Comparativa de métodos

Método Ventaja Cuándo usarlo
sorted() por claves Simple para orden de claves Cuando las claves son el orden natural
sorted() + lambda Ordena por valor Recomendado para valores
itemgetter Más rápido y limpio Ordenar por posiciones fijas
reverse=True De mayor a menor Rankings y top lists

Errores comunes y solución

Ordenar el diccionario original por accidente

sorted() nunca modifica el diccionario original. Si tu código lo cambia, probablemente estás asignando el resultado de forma incorrecta. Siempre construye un diccionario nuevo con dict() o una comprensión.

Olvidar el argumento key

Sin key, sorted() compara el par completo. Usa key=itemgetter(1) o key=lambda item: item[1] para ordenar por valor.

Preguntas frecuentes

¿sorted() modifica el diccionario original?

No. sorted() devuelve un objeto ordenado nuevo. El diccionario original no se modifica.

¿Puedo ordenar por valores sin lambda?

Sí. Puedes usar operator.itemgetter(1) como se muestra en el Método 3.

¿Por qué necesito dict() alrededor de sorted()?

Porque sorted() devuelve una lista de pares. El constructor dict() convierte esa lista de nuevo en un diccionario.

Contenido relacionado

Palabras clave relacionadas

cómo ordenar un diccionario en python, ordenar diccionario python, ordenar diccionario por valor python, sorted lambda python, itemgetter python, ordenar lista de diccionarios python, diccionario python

Guarda este tutorial y compártelo si te fue útil. Encuentra más guías prácticas en la sección how-to de Python.