Curso
La clasificació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 proyecto complejo de análisis de datos como en un script sencillo, saber cómo ordenar eficazmente un diccionario por valor puede resultar muy ú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 necesarias para organizar nuestros datos según sea necesario.
La respuesta corta: Cómo ordenar un diccionario por valor en Python
Para ordenar rápidamente un diccionario por valor, puedes utilizar la función integrada de Python .sorted() en combinación con la 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]))
print(sorted_by_values)
# Expected output:
# {'Ben': 75, 'Denver': 85, 'Alex': 88, 'Cyrus': 93}
Ahora, demos un paso atrás y comprendamos qué son los diccionarios de Python y por qué podríamos necesitar ordenarlos.
¿Qué son los diccionarios de Python?
Python Los diccionarios son un tipo de estructura de datos que almacena datos en pares clave-valor. Son muy versátiles y permiten realizar búsquedas, inserciones y eliminaciones rápidamente. Aquí tienes un ejemplo sencillo:
student_scores = {
'Alex': 88,
'Ben': 75,
'Cyrus': 93,
'Denver': 85
}
# No expected output
En el diccionario anterior, los nombres de los estudiantes son las claves y sus puntuaciones son los valores.
Los diccionarios son útiles en muchos casos, como cuando necesitamos almacenar y recuperar datos de manera eficiente. Sin embargo, hay ocasiones en las que es necesario ordenar estos datos por valores en lugar de por claves, por ejemplo, cuando queremos clasificar a los estudiantes según 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 usarla 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 usar 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)
# Expected output:
# {'Ben': 75, 'Denver': 85, 'Alex': 88, 'Cyrus': 93}
En este ejemplo, student_scores.items() devuelve un objeto de vista que muestra una lista de los pares clave-valor del diccionario. La función .sorted() ordena estos pares por los valores (item[1]), y dict() convierte la lista ordenada de nuevo 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 modificar fácilmente esto para ordenar en orden descendente o ascendente estableciendo el parámetro reverse en True o False.
Cómo ordenar un diccionario en orden ascendente
Como se ha mencionado, un diccionario se ordenará de forma ascendente de forma predeterminada cuando se utilice la función .sorted(). También podemos conseguir un orden ascendente configurando el parámetro reverse en False.
sorted_by_values_asc = dict(sorted(student_scores.items(), key=lambda item: item[1], reverse=False))
print(sorted_by_values_asc)
# Expected output:
# {'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 reverse parámetro en True.
sorted_by_values_desc = dict(sorted(student_scores.items(), key=lambda item: item[1], reverse=True))
print(sorted_by_values_desc)
# Expected output:
# {'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 ordenar por valores, también resulta útil saber cómo ordenar un diccionario por sus claves. Esto se puede hacer de forma similar utilizando la función .sorted() .
sorted_by_keys = dict(sorted(student_scores.items()))
print(sorted_by_keys)
# Expected output:
# {'Alex': 88, 'Ben': 75, 'Cyrus': 93, 'Denver': 85}
Para ordenar en orden descendente, simplemente configura reverse=True:
sorted_by_keys_desc = dict(sorted(student_scores.items(), reverse=True))
print(sorted_by_keys_desc)
# Expected output:
# {'Denver': 85', 'Cyrus': 93, 'Ben': 75, 'Alex': 88}
Conclusión
Ordenar un diccionario por sus valores en Python es una tarea habitual que se puede realizar 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 eficientes. Al dominar estos métodos de clasificación, podemos garantizar que nuestros datos estén organizados de manera coherente para adaptarse mejor a nuestras necesidades.
Preguntas frecuentes
P1: ¿Puedes ordenar un diccionario por valores si los valores son cadenas en lugar de números?
A1: Sí, podemos ordenar un diccionario por valores, incluso si los valores son cadenas. La función .sorted() ordenará los valores alfabéticamente en orden ascendente o descendente, tal y como lo hace con los números.
PREGUNTA 2: ¿Cómo puedes ordenar un diccionario por valores si contiene diccionarios anidados?
A2: Para ordenar un diccionario con diccionarios anidados, necesitamos 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.
P3: ¿Puedes ordenar un diccionario por valores sin crear un nuevo diccionario?
A3: No, los diccionarios en Python son colecciones intrínsecamente desordenadas en las 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 integrado para ordenarlos in situ. Al ordenar un diccionario, siempre se crea un nuevo diccionario con el orden deseado.
P4: ¿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 clasificación híbrido con esta complejidad.
P5: ¿Ordenar un diccionario por valores cambiará el diccionario original?
A5: No, ordenar un diccionario por valores utilizando la función « .sorted() » crea un nuevo diccionario. El diccionario original permanece sin cambios.

