Curso
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.