Python | Sorter en ordbog

Python, givet en ordbog, udføre sortering, baseret på nøgler eller værdier. [ gældende Python>=3.6v ].

Input : test_dict = {Gfg : 5, er : 7, Bedste : 2} Produktion : {'Bedste': 2, 'Gfg': 5, 'er': 7}, {'er': 7, 'Gfg': 5, 'Bedste': 2} Forklaring : Sorteret efter taster, i stigende og omvendt rækkefølge. Input : test_dict = {Bedste : 2, for : 9, nørder : 8} Produktion : {'Bedste': 2, 'Gfg': 5, 'for': 9}, {'for': 9, 'nørder': 8, 'Bedste': 2} Forklaring : Sorteret efter værdier, i stigende og omvendt rækkefølge.

Tilfælde 1: Sorter efter nøgler

Denne opgave udføres ved hjælp af sorted(), i denne udtrækker vi nøglerne ved hjælp af 1. indeks over elementer i ordbogen ekstraheret af items(), og sender det i nøgle som tilpasset lambda-funktion for at blive sorteret efter nøgler. Reverse=True tilføjes for at udføre omvendt sortering.

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

Produktion

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} 

Tilfælde 2: Sorter efter værdier

Denne opgave kan udføres på samme måde som ovenfor, den eneste forskel er for at udtrække værdier, 2. element af items() sendes som komparator.

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

Produktion

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} 

Metode#3:Brug af collections.OrderedDict() og sorted()

Nærme sig

denne tilgang bruger funktionen sorted() til at sortere en ordbog efter dens værdier i enten stigende eller faldende rækkefølge. Sorted()-funktionen kaldes med items()-metoden i ordbogen og en nøglefunktion, der returnerer det andet element i hver tuple (dvs. værdierne) eller deres negation. Den resulterende liste over tupler sendes til OrderedDict()-konstruktøren for at skabe en ny ordnet ordbog med de samme nøgleværdi-par som den originale ordbog, men sorteret efter værdi.

Algoritme

1. Kald funktionen sorted() i ordbogen 'test_dict', og send en lambda-funktion som 'key'-argumentet.
2. Lambda-funktionen tager hvert nøgle-værdi-par som input og returnerer nøglen eller værdien til at sortere efter, afhængigt af den ønskede rækkefølge.
3. Brug funktionen sorted() til at returnere en liste over sorterede nøgleværdi-par.
4. Send den sorterede liste til OrderedDict()-konstruktøren for at oprette en ny ordnet ordbog.
5. Returner den bestilte ordbog.

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

Produktion

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

Tidskompleksitet: O(N log N), hvor N er antallet af nøgleværdi-par i ordbogen.
Rumkompleksitet: O(N), da vi opretter en ny ordnet ordbog til at gemme de sorterede nøgleværdi-par.

Metode 4: brug metoden sorted() med en lambda-funktion som nøgleparameter.

Her er trinene:

  1. Definer den ordbog, der skal sorteres.
  2. Brug metoden sorted() til at sortere ordbogen efter værdier.
  3. Send en lambda-funktion som nøgleparameter til sorted()-metoden for at angive, at sorteringen skal udføres efter værdier.
  4. Brug dict()-konstruktøren til at oprette en ny ordbog fra den sorterede liste over tupler.

Python3




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

Produktion

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

Tidskompleksitet: O(n log n), hvor n er antallet af elementer i ordbogen.

Hjælpeplads: O(n) for at gemme den sorterede liste over tupler. dict()-konstruktøren tager O(n) tid til at oprette en ny ordbog fra den sorterede liste.