logo

Pitón | Ordenar un diccionario

Python, dado un diccionario, realiza la clasificación, en función de claves o valores. [Python aplicable>=3.6v].

Aporte : test_dict = {Gfg: 5, es: 7, Mejor: 2} Producción : {'Mejor': 2, 'Gfg': 5, 'es': 7}, {'es': 7, 'Gfg': 5, 'Mejor': 2} Explicación : Ordenados por claves, en orden ascendente e inverso. Aporte : test_dict = {Mejor: 2, para: 9, geeks: 8} Producción : {'Mejor': 2, 'Gfg': 5, 'para': 9}, {'para': 9, 'geeks': 8, 'Mejor': 2} Explicación : Ordenado por valores, en orden ascendente e inverso.



Caso 1: Ordenar por claves

Esta tarea se realiza usando sorted(), en esto, extraemos las claves usando el primer índice de elementos del diccionario extraídos por items() y lo pasamos en clave como función lambda personalizada para ordenar por claves. Se agrega reverse=True para realizar una ordenación inversa.

Python3








# Python3 code to demonstrate working of> # Sort a Dictionary> # Sort by Keys> # initializing dictionary> test_dict>=> {>'Gfg'> :>5>,>'is'> :>7>,>'Best'> :>2>,>'for'> :>9>,>'geeks'> :>8>}> # printing original dictionary> print>(>'The original dictionary is : '> +> str>(test_dict))> # using items() to get all items> # lambda function is passed in key to perform sort by key> res>=> {key: val>for> key, val>in> sorted>(test_dict.items(), key>=> lambda> ele: ele[>0>])}> # printing result> print>(>'Result dictionary sorted by keys : '> +> str>(res))> # using items() to get all items> # lambda function is passed in key to perform sort by key> # adding 'reversed = True' for reversed order> res>=> {key: val>for> key, val>in> sorted>(test_dict.items(), key>=> lambda> ele: ele[>0>], reverse>=> True>)}> # printing result> print>(>'Result dictionary sorted by keys ( in reversed order ) : '> +> str>(res))>

>

>

Producción

The original dictionary is : {'Gfg': 5, 'is': 7, 'Best': 2, 'for': 9, 'geeks': 8} Result dictionary sorted by keys : {'Best': 2, 'Gfg': 5, 'for': 9, 'geeks': 8, 'is': 7} Result dictionary sorted by keys ( in reversed order ) : {'is': 7, 'geeks': 8, 'for': 9, 'Gfg': 5, 'Best': 2}>

Caso 2: Ordenar por valores

Esta tarea se puede realizar de manera similar a la anterior, la única diferencia es que para extraer valores, el segundo elemento de items() se pasa como comparador.

Python3




# Python3 code to demonstrate working of> # Sort a Dictionary> # Sort by Values> # initializing dictionary> test_dict>=> {>'Gfg'> :>5>,>'is'> :>7>,>'Best'> :>2>,>'for'> :>9>,>'geeks'> :>8>}> # printing original dictionary> print>(>'The original dictionary is : '> +> str>(test_dict))> # using items() to get all items> # lambda function is passed in key to perform sort by key> # passing 2nd element of items()> res>=> {key: val>for> key, val>in> sorted>(test_dict.items(), key>=> lambda> ele: ele[>1>])}> # printing result> print>(>'Result dictionary sorted by values : '> +> str>(res))> # using items() to get all items> # lambda function is passed in key to perform sort by key> # passing 2nd element of items()> # adding 'reversed = True' for reversed order> res>=> {key: val>for> key, val>in> sorted>(test_dict.items(), key>=> lambda> ele: ele[>1>], reverse>=> True>)}> # printing result> print>(>'Result dictionary sorted by values ( in reversed order ) : '> +> str>(res))>

>

>

Producción

The original dictionary is : {'Gfg': 5, 'is': 7, 'Best': 2, 'for': 9, 'geeks': 8} Result dictionary sorted by values : {'Best': 2, 'Gfg': 5, 'is': 7, 'geeks': 8, 'for': 9} Result dictionary sorted by values ( in reversed order ) : {'for': 9, 'geeks': 8, 'is': 7, 'Gfg': 5, 'Best': 2}>

Método n.º 3: uso de colecciones.OrderedDict() y sorted()

Acercarse

este enfoque utiliza la función sorted() para ordenar un diccionario por sus valores en orden ascendente o descendente. La función sorted() se llama con el método items() del diccionario y una función clave que devuelve el segundo elemento de cada tupla (es decir, los valores) o su negación. La lista resultante de tuplas se pasa al constructor OrderedDict() para crear un nuevo diccionario ordenado con los mismos pares clave-valor que el diccionario original pero ordenado por valor.

Algoritmo

1. Llame a la función sorted() en el diccionario 'test_dict', pasando una función lambda como argumento 'clave'.
2. La función lambda toma cada par clave-valor como entrada y devuelve la clave o valor para ordenar, según el orden deseado.
3. Utilice la función sorted() para devolver una lista de pares clave-valor ordenados.
4. Pase la lista ordenada al constructor OrderedDict() para crear un nuevo diccionario ordenado.
5. Devuelva el diccionario solicitado.

Python3




from> collections>import> OrderedDict> from> operator>import> itemgetter> def> sort_dict_by_value(test_dict):> >sorted_list>=> sorted>(test_dict.items(), key>=>itemgetter(>1>))> >return> OrderedDict(sorted_list)> def> sort_dict_by_value_reverse(test_dict):> >sorted_list>=> sorted>(test_dict.items(), key>=>itemgetter(>1>), reverse>=>True>)> >return> OrderedDict(sorted_list)> test_dict>=> {>'Gfg'> :>5>,>'is'> :>7>,>'Best'> :>2>,>'for'> :>9>,>'geeks'> :>8>}> print>(sort_dict_by_value(test_dict))> print>(sort_dict_by_value_reverse(test_dict))>

>

>

Producción

OrderedDict([('Best', 2), ('Gfg', 5), ('is', 7), ('geeks', 8), ('for', 9)]) OrderedDict([('for', 9), ('geeks', 8), ('is', 7), ('Gfg', 5), ('Best', 2)])>

Complejidad del tiempo: O (N log N), donde N es el número de pares clave-valor en el diccionario.
Complejidad espacial: O (N), ya que estamos creando un nuevo diccionario ordenado para almacenar los pares clave-valor ordenados.

Método 4: utilice el método sorted() con una función lambda como parámetro clave.

Aquí están los pasos:

  1. Defina el diccionario que se va a ordenar.
  2. Utilice el método sorted() para ordenar el diccionario por valores.
  3. Pase una función lambda como parámetro clave al método sorted() para especificar que la clasificación debe realizarse por valores.
  4. Utilice el constructor dict() para crear un nuevo diccionario a partir de la lista ordenada de tuplas.

Python3


sqrt java matemáticas



def> sort_dict_by_value_lambda(test_dict):> >sorted_list>=> sorted>(test_dict.items(), key>=>lambda> x: x[>1>])> >return> dict>(sorted_list)> def> sort_dict_by_value_lambda_reverse(test_dict):> >sorted_list>=> sorted>(test_dict.items(), key>=>lambda> x: x[>1>], reverse>=>True>)> >return> dict>(sorted_list)> test_dict>=> {>'Gfg'> :>5>,>'is'> :>7>,>'Best'> :>2>,>'for'> :>9>,>'geeks'> :>8>}> print>(sort_dict_by_value_lambda(test_dict))> print>(sort_dict_by_value_lambda_reverse(test_dict))>

>

>

Producción

{'Best': 2, 'Gfg': 5, 'is': 7, 'geeks': 8, 'for': 9} {'for': 9, 'geeks': 8, 'is': 7, 'Gfg': 5, 'Best': 2}>

Complejidad del tiempo: O (n log n) donde n es el número de elementos del diccionario.

Espacio auxiliar: O(n) para almacenar la lista ordenada de tuplas. El constructor dict() tarda O(n) tiempo en crear un nuevo diccionario a partir de la lista ordenada.