C贸mo ordenar un diccionario por valor en Python

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

     

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *