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:
- Definiu el diccionari a ordenar.
- Utilitzeu el mètode sorted() per ordenar el diccionari per valors.
- Passeu una funció lambda com a paràmetre clau al mètode sorted() per especificar que l'ordenació s'ha de fer per valors.
- 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.