Saltar al contenido principal

Cómo ordenar un diccionario por valor en Python

Aprende métodos eficaces para ordenar un diccionario por valores en Python. Descubre la ordenación ascendente y descendente y consejos adicionales para la ordenación por teclas.
Actualizado 30 jul 2024  · 5 min de lectura

La ordenación es una operación fundamental en la manipulación de datos, y los diccionarios en Python no son una excepción. Tanto si estamos trabajando en un complejo proyecto de análisis de datos como en un simple script, comprender cómo ordenar eficazmente un diccionario por valores puede ser inmensamente útil.

En este artículo, desglosamos los distintos métodos para ordenar diccionarios por sus valores en Python, asegurándonos de que disponemos de las herramientas para organizar nuestros datos según sea necesario.

La respuesta breve: Cómo ordenar un diccionario por valor en Python

Para ordenar rápidamente un diccionario por valores, podemos utilizar la función incorporada de Python .sorted() en combinación con una función lambda. Este método es sencillo y eficaz para la mayoría de los casos de uso.

student_scores = {
    'Alex': 88,
    'Ben': 75,
    'Cyrus': 93,
    'Denver': 85
}
sorted_by_values = dict(sorted(student_scores.items(), key=lambda item: item[1]))
{'Ben': 75, 'Denver': 85, 'Alex': 88, 'Cyrus': 93}

Ahora, demos un paso atrás y entendamos los diccionarios de Python y por qué podemos necesitar ordenarlos.

¿Qué son los diccionarios de Python?

Python diccionarios son un tipo de estructura de datos que almacena datos en pares clave-valor. Son muy versátiles y permiten búsquedas, inserciones y supresiones rápidas. He aquí un ejemplo sencillo:

student_scores = {
    'Alex': 88,
    'Ben': 75,
    'Cyrus': 93,
    'Denver': 85
}

En el diccionario anterior, los nombres de los alumnos son las claves, y sus puntuaciones son los valores. 

Los diccionarios son útiles en muchas situaciones, como cuando necesitamos almacenar y recuperar datos de forma eficaz. Sin embargo, hay veces en que es necesario ordenar estos datos por valores en lugar de por claves; por ejemplo, cuando queremos clasificar a los alumnos por sus puntuaciones.

Cómo ordenar un diccionario por valor en Python

Ahora, veamos más de cerca la función .sorted() en Python y cómo utilizarla específicamente para ordenar diccionarios por valor.

Cómo ordenar un diccionario por valor utilizando .sorted()

La función.sorted() es una herramienta potente y flexible para ordenar en Python. Para ordenar un diccionario por sus valores, podemos utilizar una función lambda para especificar que la ordenación se base en los valores del diccionario.

student_scores = {
    'Alex': 88,
    'Ben': 75,
    'Cyrus': 93,
    'Denver': 85
}
sorted_by_values = dict(sorted(student_scores.items(), key=lambda item: item[1]))
print(sorted_by_values)
{'Ben': 75, 'Denver': 85, 'Alex': 88, 'Cyrus': 93}

En este ejemplo, student_scores.items() devuelve un objeto vista que muestra una lista de los pares de tuplas clave-valor del diccionario. La función .sorted() ordena estos pares por los valores (item[1] ), y dict() vuelve a convertir la lista ordenada en un diccionario.

Cómo ordenar un diccionario por valor en orden descendente o ascendente

Por defecto, la función .sorted() ordena en orden ascendente. Sin embargo, dependiendo de la situación, podemos modificarlo fácilmente para que ordene en orden descendente o ascendente ajustando el parámetro reverse a True o False.

Cómo ordenar un diccionario en orden ascendente

Como ya hemos dicho, un diccionario se ordenará por defecto en orden ascendente al utilizar la función.sorted(). También podemos conseguir un orden ascendente ajustando el parámetro reverse a False.

sorted_by_values_asc = dict(sorted(student_scores.items(), key=lambda item: item[1], reverse=False))
print(sorted_by_values_asc)
{'Ben': 75, 'Denver': 85, 'Alex': 88,  'Cyrus': 93}

Cómo ordenar un diccionario en orden descendente

Si queremos ordenar en orden ascendente, podemos establecer el parámetro reverse a True.

sorted_by_values_desc = dict(sorted(student_scores.items(), key=lambda item: item[1], reverse=True))
print(sorted_by_values_desc)
{'Cyrus': 93, 'Alex': 88, 'Denver': 85, 'Ben': 75}

Bonificación: Cómo ordenar un diccionario por clave en Python

Aunque este artículo se centra en la ordenación por valores, también es útil saber cómo ordenar un diccionario por sus claves. Esto puede hacerse de forma similar utilizando la función .sorted() .

sorted_by_keys = dict(sorted(student_scores.items()))
print(sorted_by_keys)
{'Alex': 88, 'Ben': 75, 'Cyrus': 93, 'Denver': 85}

Para el orden descendente, basta con poner reverse=True:

sorted_by_keys_desc = dict(sorted(student_scores.items(), reverse=True))
print(sorted_by_keys_desc)
{'Denver': 85', 'Cyrus': 93, 'Ben': 75, 'Alex': 88}

Conclusión

Ordenar un diccionario por sus valores en Python es una tarea habitual que puede realizarse fácilmente utilizando la función .sorted(). Tanto si necesitamos los datos en orden ascendente como descendente, comprender estas técnicas hará que nuestras tareas de manipulación de datos sean más sencillas y eficaces. Al dominar estos métodos de clasificación, podemos asegurarnos de que nuestros datos están organizados de forma coherente para adaptarse mejor a nuestras necesidades.

Preguntas frecuentes

Q1: ¿Puedo ordenar un diccionario por valores si los valores son cadenas en lugar de números?

A1: Sí, podemos ordenar un diccionario por valores, aunque los valores sean cadenas. La función .sorted() ordenará los valores alfabéticamente en orden ascendente o descendente, igual que hace con los números.

Q2: ¿Cómo puedo ordenar un diccionario por valores si contiene diccionarios anidados?

A2: Para ordenar un diccionario con diccionarios anidados, tenemos que definir una función de ordenación personalizada que extraiga y compare los valores anidados relevantes. Esto requiere una función lambda más compleja o una función independiente para gestionar la comparación.

Q3: ¿Puedo ordenar un diccionario por valores in situ sin crear un nuevo diccionario?

A3: No, los diccionarios en Python son colecciones intrínsecamente desordenadas a partir de versiones anteriores a la 3.7, y aunque mantienen el orden de inserción a partir de Python 3.7, no hay ningún método incorporado para ordenarlos in situ. Ordenar un diccionario siempre da como resultado la creación de un nuevo diccionario con el orden deseado.

Q4: ¿Cuál es la complejidad temporal de ordenar un diccionario por valores en Python?

A4: La complejidad temporal de ordenar un diccionario por valores utilizando la función .sorted() es O(n log n), donde n es el número de pares clave-valor del diccionario. Esto se debe a que .sorted() utiliza internamente Timsort, un algoritmo de ordenación híbrido con esta complejidad.

Q5: ¿La ordenación de un diccionario por valores modificará el diccionario original?

A5: No, ordenar un diccionario por valores utilizando la función .sorted() crea un nuevo diccionario. El diccionario original permanece inalterado.

Temas

¡Aprende más sobre Python con estos cursos!

Certificación disponible

curso

Introducción a Python

4 hr
5.6M
Domina los fundamentos del análisis de datos con Python en sólo cuatro horas. Este curso online introducirá la interfaz de Python y explorará paquetes populares.
Ver detallesRight Arrow
Comienza El Curso
Ver másRight Arrow
Relacionado

tutorial

Tutorial de comprensión del diccionario Python

¡Aprende todo sobre la comprensión de diccionarios en Python: cómo puedes utilizarla para crear diccionarios, para sustituir los for loops (anidados) o las funciones lambda por map(), filter() y reduce(), ...!

Sejal Jaiswal

14 min

tutorial

Añadir diccionario Python: Cómo añadir pares clave-valor

Aprende a añadir pares clave-valor en un diccionario Python utilizando métodos como la notación de corchetes, .update() para adiciones masivas y .setdefault() para inserciones condicionales.
Samuel Shaibu's photo

Samuel Shaibu

8 min

tutorial

Búsqueda binaria en Python: guía completa para una búsqueda eficiente

Aprende a implementar la búsqueda binaria en Python utilizando enfoques iterativos y recursivos, y explora el módulo bisect integrado para obtener funciones de búsqueda binaria eficientes y preimplementadas.
Amberle McKee's photo

Amberle McKee

12 min

tutorial

Las mejores técnicas para gestionar valores perdidos que todo científico de datos debe conocer

Explore varias técnicas para manejar eficazmente los valores perdidos y sus implementaciones en Python.
Zoumana Keita 's photo

Zoumana Keita

15 min

tutorial

Tutorial de funciones de Python

Un tutorial sobre funciones en Python que cubre cómo escribir funciones, cómo invocarlas y mucho más.
Karlijn Willems's photo

Karlijn Willems

14 min

tutorial

Tutorial de Clasificación en Árbol de Decisión en Python

En este tutorial, aprenderás Clasificación en Árbol de Decisión, medidas de selección de atributos y cómo construir y optimizar el Clasificador en Árbol de Decisión utilizando el paquete Python Scikit-learn.
Avinash Navlani's photo

Avinash Navlani

12 min

See MoreSee More