Introducci贸n
Contenido
Un diccionario en Python es una colecci贸n de elementos que almacena datos como pares clave-valor. En Python 3.7 y versiones posteriores, los diccionarios se ordenan seg煤n el orden de inserci贸n del elemento. En versiones anteriores, estaban desordenadas.
Echemos un vistazo a c贸mo podemos ordenar un diccionario en funci贸n de los valores que contiene.
Ordenar diccionario usando un bucle for
Podemos ordenar un diccionario con la ayuda de un for
lazo. Primero, usamos el sorted()
funci贸n para ordenar los valores del diccionario. Luego recorremos los valores ordenados, encontrando las claves para cada valor. Agregamos estos pares clave-valor en el orden ordenado en un nuevo diccionario.
Nota: La clasificaci贸n no le permite reordenar el diccionario en su lugar. Estamos escribiendo los pares ordenados en un diccionario vac铆o completamente nuevo.
dict1 = {1: 1, 2: 9, 3: 4}
sorted_values = sorted(dict1.values()) # Sort the values
sorted_dict = {}
for i in sorted_values:
for k in dict1.keys():
if dict1[k] == i:
sorted_dict[k] = dict1[k]
break
print(sorted_dict)
Si ejecuta esto con el int茅rprete de Python, ver谩:
{1: 1, 3: 4, 2: 9}
Ahora que hemos visto c贸mo ordenar con bucles, veamos una alternativa m谩s popular que usa el sorted()
funci贸n.
Ordenar diccionario usando la funci贸n sorted ()
Usamos previamente el sorted()
funci贸n para ordenar los valores de una matriz. Al ordenar un diccionario, podemos pasar un argumento m谩s al sorted()
funciona as铆: sorted(dict1, key=dict1.get)
.
Aqu铆, key
es una funci贸n a la que se llama en cada elemento antes de comparar los valores para ordenarlos. los get()
El m茅todo en objetos de diccionario devuelve el valor de para la clave de un diccionario.
los sorted(dict1, key=dict1.get)
expresi贸n devolver谩 la lista de claves cuyos valores est谩n ordenados. A partir de ah铆, podemos crear un nuevo diccionario ordenado:
dict1 = {1: 1, 2: 9, 3: 4}
sorted_dict = {}
sorted_keys = sorted(dict1, key=dict1.get) # [1, 3, 2]
for w in sorted_keys:
sorted_dict[w] = dict1[w]
print(sorted_dict) # {1: 1, 3: 4, 2: 9}
Utilizando el sorted()
La funci贸n ha reducido la cantidad de c贸digo que ten铆amos que escribir al usar for
bucles. Sin embargo, podemos combinar a煤n m谩s sorted()
funcionar con el itemgetter()
funci贸n para una soluci贸n m谩s sucinta para ordenar diccionarios por valores.
Ordenar diccionario usando el m贸dulo operador y itemgetter ()
los operator
m贸dulo incluye el itemgetter()
funci贸n. Esta funci贸n devuelve un objeto invocable que devuelve un elemento de un objeto.
Por ejemplo, usemos para itemgetter()
para crear un objeto invocable que devuelva el valor de cualquier diccionario con una clave que sea 2
:
import operator
dict1 = {1: 1, 2: 9}
get_item_with_key_2 = operator.itemgetter(2)
print(get_item_with_key_2(dict1)) # 9
Cada diccionario tiene acceso a la items()
m茅todo. Esta funci贸n devuelve los pares clave-valor de un diccionario como una lista de tuplas. Podemos ordenar la lista de tuplas usando el itemgetter()
funci贸n para extraer el segundo valor de la tupla, es decir, el valor de las claves en el diccionario.
Una vez ordenado, podemos crear un diccionario basado en esos valores:
import operator
dict1 = {1: 1, 2: 9, 3: 4}
sorted_tuples = sorted(dict1.items(), key=operator.itemgetter(1))
print(sorted_tuples) # [(1, 1), (3, 4), (2, 9)]
sorted_dict = {k: v for k, v in sorted_tuples}
print(sorted_dict) # {1: 1, 3: 4, 2: 9}
隆Con mucho menos esfuerzo, tenemos un diccionario ordenado por valores!
Como el key
El argumento acepta cualquier funci贸n, podemos usar funciones lambda para devolver valores de diccionario para que puedan ser ordenados. Veamos c贸mo.
Ordenar diccionario mediante una funci贸n Lambda
Las funciones de Lambda son funciones an贸nimas o sin nombre en Python. Podemos usar funciones lamba para obtener el valor de un elemento del diccionario sin tener que importar el operator
m贸dulo para itemgetter()
. Si desea obtener m谩s informaci贸n sobre lambas, puede leer sobre ellas en nuestra gu铆a de funciones Lambda en Python.
Ordenemos un diccionario por valores usando una funci贸n lambda en el key
argumento de sorted()
:
dict1 = {1: 1, 2: 9, 3: 4}
sorted_tuples = sorted(dict1.items(), key=lambda item: item[1])
print(sorted_tuples) # [(1, 1), (3, 4), (2, 9)]
sorted_dict = {k: v for k, v in sorted_tuples}
print(sorted_dict) # {1: 1, 3: 4, 2: 9}
Tenga en cuenta que los m茅todos que hemos discutido hasta ahora solo funcionan con Python 3.7 y versiones posteriores. Veamos qu茅 podemos hacer con las versiones anteriores de Python.
Devolver un diccionario nuevo con valores ordenados
Despu茅s de ordenar un diccionario por valores, para mantener un diccionario ordenado en versiones de Python anteriores a la 3.7, debe usar el OrderedDict
– disponible en el collections
m贸dulo. Estos objetos son diccionarios que mantienen el orden de inserci贸n.
A continuaci贸n, se muestra un ejemplo de clasificaci贸n y uso OrderedDict
:
import operator
from collections import OrderedDict
dict1 = {1: 1, 2: 9, 3: 4}
sorted_tuples = sorted(dict1.items(), key=operator.itemgetter(1))
print(sorted_tuples) # [(1, 1), (3, 4), (2, 9)]
sorted_dict = OrderedDict()
for k, v in sorted_tuples:
sorted_dict[k] = v
print(sorted_dict) # {1: 1, 3: 4, 2: 9}
Conclusi贸n
Este tutorial mostr贸 c贸mo se puede ordenar un diccionario en funci贸n de sus valores. Primero ordenamos un diccionario usando dos bucles for. Luego mejoramos nuestro tipo usando el sorted()
funci贸n. Tambi茅n hemos visto el itemgetter()
funci贸n de la operator
El m贸dulo puede hacer que nuestra soluci贸n sea m谩s concisa.
Por 煤ltimo, adaptamos nuestra soluci贸n para que funcione en versiones de Python inferiores a 3.7.
Variaciones del sorted()
son las m谩s populares y fiables para ordenar un diccionario por valores.