logo

Python | Ordena un diccionari

Python, donat un diccionari, realitzeu una ordenació en funció de claus o valors. [Python aplicable>=3.6v].

Entrada : test_dict = {Gfg : 5, és : 7, Millor : 2} Sortida : {'Millor': 2, 'Gfg': 5, 'és': 7}, {'és': 7, 'Gfg': 5, 'Millor': 2} Explicació : Ordenat per claus, en ordre ascendent i invers. Entrada : test_dict = {Millor : 2, per a : 9, frikis : 8} Sortida : {'Millor': 2, 'Gfg': 5, 'per': 9}, {'per': 9, 'geeks': 8, 'Millor': 2} Explicació : Ordenats per valors, en ordre ascendent i invers.



Cas 1: Ordena per claus

Aquesta tasca es realitza mitjançant sorted(), en això, extreu les claus utilitzant el primer índex d'elements del diccionari extrets per items(), i el passem a la clau com a funció lambda personalitzada per ordenar-les per claus. S'afegeix el reverse=True per fer l'ordenació inversa.

Python 3








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

>

>

Sortida

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

Cas 2: Ordena per valors

Aquesta tasca es pot realitzar de la mateixa manera que l'anterior, l'única diferència és per extreure valors, el segon element d'elements() es passa com a comparador.

Python 3




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

>

>

Sortida

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ètode núm. 3: Ús de collections.OrderedDict() i sorted()

Aproximació

aquest enfocament utilitza la funció sortd() per ordenar un diccionari segons els seus valors en ordre ascendent o descendent. La funció sortd() es crida amb el mètode items() del diccionari i una funció clau que retorna el segon element de cada tupla (és a dir, els valors) o la seva negació. La llista de tuples resultant es passa al constructor OrderedDict() per crear un nou diccionari ordenat amb els mateixos parells clau-valor que el diccionari original però ordenats per valor.

Algoritme

1. Truqueu a la funció sorted() del diccionari ‘test_dict’, passant una funció lambda com a argument ‘key’.
2. La funció lambda pren cada parell clau-valor com a entrada i retorna la clau o el valor per ordenar, en funció de l'ordre desitjat.
3. Utilitzeu la funció sortd() per retornar una llista de parells clau-valor ordenats.
4. Passeu la llista ordenada al constructor OrderedDict() per crear un nou diccionari ordenat.
5. Retorna el diccionari ordenat.

Python 3




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

>

>

Sortida

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

Complexitat temporal: O(N log N), on N és el nombre de parells clau-valor del diccionari.
Complexitat espacial: O(N), ja que estem creant un nou diccionari ordenat per emmagatzemar els parells clau-valor ordenats.

Mètode 4: utilitzeu el mètode sorted() amb una funció lambda com a paràmetre clau.

Aquests són els passos:

  1. Definiu el diccionari a ordenar.
  2. Utilitzeu el mètode sorted() per ordenar el diccionari per valors.
  3. Passeu una funció lambda com a paràmetre clau al mètode sorted() per especificar que l'ordenació s'ha de fer per valors.
  4. Utilitzeu el constructor dict() per crear un nou diccionari a partir de la llista ordenada de tuples.

Python 3


producte de punts numpy



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

>

>

Sortida

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

Complexitat temporal: O(n log n) on n és el nombre d'elements del diccionari.

Espai auxiliar: O(n) per emmagatzemar la llista ordenada de tuples. El constructor dict() triga O(n) temps a crear un nou diccionari a partir de la llista ordenada.