Python
Tipos de datos contenedor
dict
ordenar

Ordenar un diccionario Python: explicación y ejemplos

Los diccionarios de Python son estructuras de datos útiles que almacenan datos como pares clave-valor.

Sin embargo, los diccionarios no están ordenados por defecto, y a veces necesitas ordenar los datos de un diccionario en un orden particular.

En este artículo, veremos cómo ordenar un diccionario Python. Aquí están los detalles.

  1. ordenar por clave
  2. ordenar por valor (función lambda)
  3. ordenar por múltiples valores o en orden descendente
  4. ordenar múltiples diccionarios
  5. ordenar un diccionario dentro de una lista Python
  6. ordenar la salida del diccionario

1. Ordenar por clave

Para ordenar un diccionario por su clave, puede utilizar la función incorporada sorted().

Cuando ordena un diccionario por clave, el orden por clave está garantizado y el resultado es fácil de predecir. Dado que las claves identifican unívocamente cada par clave-valor, ordenar por ellas puede ayudarte a navegar rápidamente por un diccionario o a encontrar la información que necesitas.

dictionary = {'c': 3, 'a': 1, 'b': 2}
sorted_dict = dict(sorted(dictionary.items()))
print(sorted_dict)
 
# Output
{'a': 1, 'b': 2, 'c': 3}

2. Ordenación por valor (función lambda)

Para ordenar un diccionario por valor, utilice la función lambda en el argumento key de la función sorted() para ordenar el diccionario por valor.

Ordenar un diccionario por valor asegura el orden por valor, lo que facilita ver distribuciones o patrones en los valores.

La función lambda facilita el establecimiento de una condición de clasificación basada en el valor. La función lambda es una función anónima, útil para implementar funciones sencillas.

dictionary = {'a': 3, 'b': 1, 'c': 2}
sorted_dict = dict(sorted(dictionary.items(), key=lambda item: item[1]))
print(sorted_dict)
 
# Output
{'b': 1, 'c': 2, 'a': 3}

3. Ordenar valores múltiples o en orden descendente

3.1. Ordenación por múltiples valores

Cuando un diccionario tiene múltiples valores, ordenar el diccionario por ellos es un poco más complicado, especialmente cuando los valores son tipos de datos ordenados como tuplas o listas.

Por ejemplo, supongamos que tiene un diccionario con claves y valores como se muestra a continuación.

dict_to_sort = {'a': (2, 3), 'b': (1, 3), 'c': (1, 2), 'd': (2, 2)}

Aquí, el valor es una tupla con dos elementos. Para ordenarlo por clave y primer elemento, y luego segundo elemento, se podría escribir código como este

sorted_dict = dict(sorted(dict_to_sort.items(), key=lambda item: (item[0], item[1][0], item[1][1])))
 
print(sorted_dict)
 
# Output
{'b': (1, 3), 'c': (1, 2), 'a': (2, 3), 'd': (2, 2)}

La parte key=lambda item: (item[0], item[1][0], item[1][1]) es el código que especifica la clave de ordenación.

Aquí, item[0] representa la clave del diccionario, item[1][0] representa el primer elemento de la tuple que es el valor del diccionario, y item[1][1] representa el segundo elemento de la tupla que es el valor del diccionario.

Así que este código ordena el diccionario por la clave, luego por el primer elemento de la tuple, luego por el segundo elemento.

De esta forma, se puede ordenar un diccionario por múltiples valores, utilizando cada elemento que compone el valor del diccionario como base para la ordenación.

3.2. Ordenación descendente

Para ordenar un diccionario en orden descendente, puede establecer el argumento reverse de la función sorted() en True.

Por ejemplo, suponga que tiene un diccionario como el siguiente.

my_dict = {'b': 5, 'a': 9, 'c': 7}

Para ordenar este diccionario en orden descendente por clave, puede hacer lo siguiente

sorted_dict = dict(sorted(my_dict.items(), key=lambda item: item[0], reverse=True))
 
print(sorted_dict)
 
# Output
{'c': 7, 'b': 5, 'a': 9}

Del mismo modo, para ordenar este diccionario por valor en orden descendente, podría hacer lo siguiente

sorted_dict = dict(sorted(my_dict.items(), key=lambda item: item[1], reverse=True))
 
print(sorted_dict)
 
# Output
{'a': 9, 'c': 7, 'b': 5}

donde key=lambda item: item[0] o key=lambda item: item[1] es un código que especifica el criterio de ordenación, reverse=True indica al diccionario que ordene en orden descendente según este criterio.

4. Ordenación de varios diccionarios

Cuando un diccionario contiene otro diccionario en su interior, se denomina "diccionario anidado". Los diccionarios anidados son útiles para estructurar datos jerárquicamente, y se ven a menudo en formatos de datos como JSON.

Sin embargo, ordenar diccionarios anidados puede ser un poco complicado. Necesita ordenar por una clave en el diccionario externo, o por una clave o valor en el diccionario interno.

Por ejemplo, supongamos que tiene un diccionario anidado con "nombre de usuario" como clave y un diccionario con "edad" y "dirección" como valores, como se muestra a continuación.

nested_dict = {'John': {'age': 25, 'address': '123 St'},
                'Jane': {'age': 23, 'address': '456 St'},
                'Dave': {'age': 30, 'address': '789 St'}}

Para ordenar este diccionario anidado por "edad", podría escribir un código como el siguiente

sorted_dict = dict(sorted(nested_dict.items(), key=lambda item: item[1]['age']))
print(sorted_dict)
 
# Output
{'Jane': {'age': 23, 'address': '456 St'},
'John': {'age': 25, 'address': '123 St'},
'Dave': {'age': 30, 'address': '789 St'}}

La parte key=lambda item: item[1]['edad'] es el código que especifica la clave de ordenación para realizar la ordenación por age. En este caso, item[1] representa el valor de un diccionario, que es otro diccionario.

Así que item[1]['age'] sería código para obtener el valor de 'edad' de un diccionario anidado.

Al organizar tus diccionarios anidados de esta manera, puedes entender y manejar fácilmente tus datos de acuerdo a cada nivel. Por supuesto, cuanto más profundo sea el nivel de anidamiento, más complicada será la ordenación, pero se aplica el mismo principio.

5. Ordenar un diccionario en una lista de Python

Para ordenar un diccionario dentro de una lista, especifique la clave del diccionario que desea ordenar en el argumento key.

list_of_dict = [{'name': 'John', 'age': 25}, {'name': 'Jane', 'age': 23}, {'name': 'Dave', 'age': 30}]
sorted_list_of_dict = sorted(list_of_dict, key=lambda d: d['age'])
 
print(sorted_list_of_dict)
 
# Output
[{'name': 'Jane', 'age': 23}, {'name': 'John', 'age': 25}, {'name': 'Dave', 'age': 30}]

6. Salida de diccionario ordenado

Para ordenar y dar salida a un diccionario, utilice una sentencia for para iterar sobre los pares clave-valor.

dictionary = {'c': 3, 'a': 1, 'b': 2}
sorted_dict = dict(sorted(dictionary.items()))
 
for key, value in sorted_dict.items():
    print(f"{key}: {value}")
 
# Output
a: 1
b: 2
c: 3

Conclusión

Hasta ahora hemos cubierto seis temas relacionados con la ordenación de diccionarios en Python. Esperemos que estos te ayuden en tu trabajo en el mundo real en el futuro.

copyright for Ordenar un diccionario Python: explicación y ejemplos

© 2023 All rights reserved.