Logotipo de Zephyrnet

Cómo ordenar un diccionario por valor en Python

Fecha:

Introducción

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 por orden de inserción de elementos. En versiones anteriores, estaban desordenados.

En este artículo, veremos cómo podemos ordenar un diccionario en función de los valores que contienen.

Ordenar diccionario usando un para Red ISTE Loop

Podemos ordenar un diccionario con la ayuda de un for círculo. 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: Ordenar no le permite reordenar el diccionario en su lugar. Estamos escribiendo los pares ordenados en un diccionario completamente nuevo y vacío.

dict1 = {1: 1, 2: 9, 3: 4}
sorted_values = sorted(dict1.values()) 
sorted_dict = {}

for i in sorted_values:
    for k in dict1.keys():
        if dict1[k] == i:
            sorted_dict[k] = dict1[k]

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 el ordenado () Función

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 que se llama en cada elemento antes de comparar los valores para ordenarlos. los get() El método en los objetos del diccionario devuelve el valor de la clave de un diccionario.

La sorted(dict1, key=dict1.get) expresión devolverá la lista de claves cuyos valores están ordenados en orden. 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)  

for w in sorted_keys:
    sorted_dict[w] = dict1[w]

print(sorted_dict) 

Usando el sorted() ha reducido la cantidad de código que teníamos que escribir al usar for bucles Sin embargo, podemos combinar aún más el sorted() funcionar con el itemgetter() para una solución más sucinta a la clasificación de diccionarios por valores.

Ordenar diccionario usando el operador Módulo y captador de elementos()

La 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 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))  

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)  
sorted_dict = {k: v for k, v in sorted_tuples}

print(sorted_dict) 

¡Con mucho menos esfuerzo, tenemos un diccionario ordenado por valores!

A este tenor, key argumento acepta cualquier función, podemos usar funciones lambda para devolver valores de diccionario para que puedan ordenarse. Veamos cómo.

Ordenar diccionario usando una función Lambda

Las funciones Lambda son funciones anónimas o sin nombre en Python. Podemos usar funciones lambda 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 las lambdas, puede leer sobre ellas en nuestra guía de Funciones Lambda en Python.

Consulte nuestra guía práctica y práctica para aprender Git, con las mejores prácticas, los estándares aceptados por la industria y la hoja de trucos incluida. Deja de buscar en Google los comandos de Git y, de hecho, aprenden ella!

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)  
sorted_dict = {k: v for k, v in sorted_tuples}

print(sorted_dict)  

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 para 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 las 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.

He aquí 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)  

sorted_dict = OrderedDict()
for k, v in sorted_tuples:
    sorted_dict[k] = v

print(sorted_dict)  

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 nuestra clasificación usando el sorted() función. También hemos visto el itemgetter() funcionar desde el operator module puede hacer que nuestra solución sea más sucinta.

Por último, adaptamos nuestra solución para que funcione en versiones de Python anteriores a la 3.7.

Variaciones del sorted() son las más populares y fiables para ordenar un diccionario por valores.

punto_img

Información más reciente

punto_img

Habla con nosotros!

¡Hola! ¿Le puedo ayudar en algo?