En este tutorial, aprenderá a ordenar un diccionario Python por su clave o valor.
Cuando trabaje con un diccionario en Python, habrá ocasiones en las que necesitará ordenar su contenido-por clave o por valor. Como un diccionario Python es un mapeo clave-valor, creará un nuevo diccionario que tenga las claves o valores ordenados según sea necesario.
En este tutorial, comenzaremos revisando los fundamentos del diccionario Python. Luego aprenderemos a crear un nuevo diccionario en el que el contenido esté ordenado por clave o por valor, según sea necesario.
Conceptos básicos del diccionario Python, revisados
El diccionario es una estructura de datos incorporada en Python. Almacena elementos como pares clave-valor. Puede utilizar las claves para buscar los valores correspondientes. Como las claves identifican unívocamente los valores, no debe haber repetición de claves.
py_dict = {"Python": "¡genial!", "Aprender":Verdadero}
py_dict["Python"]
# Salida: ¡genial!
py_dict["Aprende"]
# Salida: True
Funcionalmente, un diccionario es similar a un mapa hash. Por lo tanto, no es necesariamente una estructura de datos ordenada. Puede acceder al contenido de un diccionario en cualquier orden arbitrario, siempre que conozca las claves.
Ordenación de elementos en un diccionario
En versiones anteriores de Python, tenía que utilizar un OrderedDict para preservar el orden de las claves. Sin embargo, a partir de Python 3.7, puede acceder a los elementos en el mismo orden en que los añade al diccionario.
Ahora que ha aprendido los conceptos básicos de los diccionarios de Python, aprendamos a crear copias ordenadas del diccionario.
⚙️ Nota: Necesita tener Python 3.7 o posterior para que el código de este tutorial funcione como es debido. Puede descargar la última versión de Python.
Cómo ordenar un diccionario Python por clave
Observe la siguiente imagen de la carta de postres de una cafetería. Hay dos columnas correspondientes a los artículos del menú y sus respectivos precios.
Puede representar esto en forma de diccionario Python recogiendo los nombres de los artículos como claves y sus precios como valores.
Sigamos adelante y creemos el diccionario postres
, como se muestra a continuación.
postres = {
"Helado":10
"Brownies":12
"Tarta de queso":3
"Panecillo suizo":5
"Galletas":4
"Pastel de taza":2
}
A continuación, vamos a crear un diccionario sorted_desserts
, en el que los postres se ordenan por orden alfabético. En el diccionario postres
original, los nombres de los postres son las claves. Así que debe ordenar estas claves en orden alfabético para crear un nuevo diccionario.
Cómo acceder a las claves de un diccionario Python
Para ello, primero obtendremos las claves del diccionario y luego las ordenaremos por orden alfabético.
En Python, puede utilizar el método incorporado en el diccionario .
keys
() para obtener una lista de todas las claves del diccionario.
Llamemos al método . keys
() en el diccionario de
postres para recuperar las claves, como se muestra a continuación.
keys = postres.keys()
print(claves)
#Salida
['Helado', 'Brownies', 'Tarta de queso', 'Panecillo suizo', 'Galletas',
'Pastel de taza']
Llamar a la función incorporada sorted(
)
de Python con una lista como argumento devuelve una nueva lista ordenada.
A continuación, llamemos a la función sorted
() con la lista keys
como argumento y almacenemos la lista ordenada en la variable sorted_keys
.
llaves_ordenadas = ordenadas(llaves)
print(llaves_ordenadas)
# Salida
['Brownies', 'Tarta de queso', 'Galletas', 'Pastel de taza', 'Helado', 'Panecillo suizo']
Ahora que tenemos las claves ordenadas por orden alfabético, podemos buscar los valores correspondientes a las claves de sorted_keys
en el diccionario de postres
, como se muestra a continuación.
postres_ordenados = {}
para clave en claves_ordenadas:
postres_ordenados[clave] = postres[clave]
print(postres_ordenados)
# Salida
{'Brownies': 12, 'Tarta de queso': 3, 'Galletas': 4, 'Cup cake': 2,
'Helado': 10, 'Panecillo suizo': 5}
Ampliemos el bloque de código anterior:
- Inicialice
sorted_desserts
para que sea un diccionario Python vacío. - Recorra en bucle la lista de claves
sorted_keys
. - Para cada clave en
sorted_keys
, añada una entrada asorted_desserts
buscando el valor correspondiente en el diccionariodesserts
.
Utilizar el bucle for
de esta forma se considera verboso. En Python, existe una alternativa más concisa utilizando la comprensión de diccionario.
Comprensión de diccionario en Python
Python soporta el uso de la comprensión de diccionario, similar a la comprensión de lista. La comprensión de diccionario le permite crear un nuevo diccionario Python con una sola línea de código.
▶️ He aquí la construcción general para utilizar la comprensión de diccionario en Python.
# 1. cuando tiene claves y valores en dos listas: lista1, lista2
nuevo_diccionario = {clave:valor para clave,valor en zip(lista1,lista2)}
# 2. cuando tiene las claves y puede buscar los valores
nueva_dicta = {clave:valor para clave en }
Utilicemos la segunda construcción de la celda anterior: new_dict = {key:value for key in }
para crear un diccionario sorted_desserts
.
En este ejemplo
- iterable: la lista
llaves_ordenadas
- clave: la clave a la que accedemos recorriendo en bucle sorted_keys
- valor: buscamos el valor correspondiente a la clave en el diccionario postres,
postres[clave]
Juntándolo todo, tenemos la expresión para la comprensión del diccionario, como se muestra a continuación.
postres_ordenados = {clave:postres[clave] para clave en llaves_ordenadas}
print(postres_ordenados)
{'Brownies': 12, 'Tarta de queso': 3, 'Galletas': 4, 'Cup cake': 2,
'Helado': 10, 'Panecillo suizo': 5}
A partir de la salida anterior, los postres se ordenan alfabéticamente en el diccionario sorted_desserts
.
Cómo ordenar un diccionario Python por valor
A continuación, aprenderemos cómo ordenar un diccionario Python por sus valores.
En el diccionario postres
, los valores corresponden a los precios de los postres. Es posible que desee ordenar el diccionario por precios, ya sea en orden creciente o decreciente.
▶️ Puede utilizar el método incorporado en el diccionario .items()
para obtener todos los pares clave-valor. Cada tupla es un par clave-valor.
postres.items()
dict_items([('Helado', 10), ('Brownies', 12), ('Tarta de queso', 3),
('Panecillo suizo', 5), ('Galletas', 4), ('Pastel de taza', 2)])
Cada uno de los elementos es una tupla en sí mismo. Así que también puede indexar en cada par clave-valor para acceder a las claves y valores individualmente.
dict_items = postres.items()
for item in dict_items:
print(f"key:{item[0]},value:{item[1]}")
# Salida
clave:Helado,valor:10
clave:Brownies,valor:12
clave:Tarta de queso,valor:3
clave:Panecillo suizo,valor:5
tecla:Galletas,valor:4
clave:Tarta,valor:2
Como queremos ordenar por valores, utilizaremos el método anterior para obtener el valor en el índice 1 del par clave-valor.
Cómo ordenar los valores de un diccionario Python en orden creciente
Esta vez, utilizaremos la función sorted(
) junto con el parámetro opcional key
. key
puede ser cualquier función de Python, una función incorporada, una función definida por el usuario o incluso una función lambda.
Nota:
lambda args: expression
es la sintaxis para definir funciones lambda en Python.
En este ejemplo de ordenación de postres por precio, tenemos acceso a elementos del diccionario (pares clave-valor). Estableceremos key = lambda item:item[1]
ya que queremos ordenar por el valor (precio).
Como la función sorted()
devuelve una lista por defecto, deberá convertirla explícitamente en un dict
, como se muestra a continuación.
postres_ordenados = dict(ordenados(postres.elementos(), clave=lambda elemento:elemento[1])
print(postres_ordenados)
{'Pastel de taza': 2, 'Tarta de queso': 3, 'Galletas': 4, 'Panecillo suizo': 5,
'Helado': 6 10, 'Brownies': 12}
También puede reescribir utilizando la comprensión de diccionario, como se ha comentado anteriormente.
postres_ordenados = {clave:valor para clave, valor en ordenados(postres.items(),
clave=lambda artículo:artículo[1])}
print(postres_ordenados)
# Salida
{'Pastel de taza': 2, 'Tarta de queso': 3, 'Galletas': 4, 'Panecillo suizo': 5,
'Helado': 10, 'Brownies': 12}
En sorted_desserts
, Cup Cake
con un precio de 2 $ es el primer elemento y Brownies
con un precio de 12 $ es el último elemento.
Cómo ordenar los valores de un diccionario Python en orden decreciente
Si desea ordenar los precios en orden decreciente, puede establecer el parámetro inverso opcional en True
, como se explica a continuación.
sorted_desserts = dict(sorted(postres.items(), key=lambda item:item[1],
inverso=True))
print(postres_ordenados)
# Salida
{'Brownies': 12, 'Helado': 10, 'Panecillo suizo': 5, 'Galletas': 4
'Tarta de queso': 3, 'Cup cake': 2}
Ahora, sorted_desserts
se ha ordenado en orden decreciente de precios, empezando por el postre más caro, los brownies
, que cuestan 12 dólares.
Conclusión
Resumamos rápidamente todo lo que hemos aprendido en este tutorial.
- Un diccionario Python almacena datos en pares clave-valor; las claves deben ser todas únicas.
- En el proceso de ordenar un diccionario por clave o valor, creamos un nuevo diccionario que se ordena según sea necesario.
- Puede utilizar los métodos de diccionario incorporados, .keys() y .items() para recuperar todas las claves y pares clave-valor, respectivamente.
- Puede utilizar la función sorted () junto con los parámetros opcionales clave e inverso para conseguir la ordenación deseada.