Python, Givet en ordbok, utför sortering, baserat på nycklar eller värden. [tillämplig Python>=3,6v ].
Inmatning : test_dict = {Gfg : 5, är : 7, Bästa : 2} Produktion : {'Bäst': 2, 'Gfg': 5, 'är': 7}, {'är': 7, 'Gfg': 5, 'Bäst': 2} Förklaring : Sorterat efter tangenter, i stigande och omvänd ordning. Inmatning : test_dict = {Bäst : 2, för : 9, nördar : 8} Produktion : {'Bäst': 2, 'Gfg': 5, 'för': 9}, {'för': 9, 'nördar': 8, 'Bäst': 2} Förklaring : Sorterat efter värden, i stigande och omvänd ordning.
Fall 1 : Sortera efter nycklar
Den här uppgiften utförs med hjälp av sorted(), i detta extraherar vi nycklarna med hjälp av det första indexet av artiklar i ordboken extraherat av items(), och skickar det i nyckel som anpassad lambda-funktion för att sorteras efter nycklar. Reverse=True läggs till för att utföra omvänd 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}>
Fall 2 : Sortera efter värden
Denna uppgift kan utföras på liknande sätt som ovan, den enda skillnaden är för att extrahera värden, andra elementet i items() skickas 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}>
Metod#3:Användning av collections.OrderedDict() och sorted()
Närma sig
detta tillvägagångssätt använder funktionen sorted() för att sortera en ordbok efter dess värden i antingen stigande eller fallande ordning. Funktionen sortered() anropas med metoden items() i ordboken och en nyckelfunktion som returnerar det andra elementet i varje tupel (d.v.s. värdena) eller deras negation. Den resulterande listan med tuplar skickas till OrderedDict()-konstruktorn för att skapa en ny ordnad ordbok med samma nyckel-värdepar som den ursprungliga ordboken men sorterad efter värde.
Algoritm
1. Anropa sorted()-funktionen i ordboken 'test_dict' och skicka en lambda-funktion som 'nyckel'-argument.
2. Lambdafunktionen tar varje nyckel-värdepar som indata och returnerar nyckeln eller värdet att sortera efter, beroende på önskad ordning.
3. Använd funktionen sorted() för att returnera en lista med sorterade nyckel-värdepar.
4. Skicka den sorterade listan till OrderedDict()-konstruktorn för att skapa en ny ordnad ordbok.
5. Returnera den beställda ordboken.
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)])>
Tidskomplexitet: O(N log N), där N är antalet nyckel-värdepar i ordboken.
Rymdkomplexitet: O(N), eftersom vi skapar en ny ordnad ordbok för att lagra de sorterade nyckel-värdeparen.
Metod 4 : använd metoden sorted() med en lambda-funktion som nyckelparameter.
Här är stegen:
- Definiera ordlistan som ska sorteras.
- Använd metoden sorted() för att sortera ordboken efter värden.
- Skicka en lambda-funktion som nyckelparameter till metoden sorted() för att ange att sorteringen ska göras efter värden.
- Använd dict()-konstruktorn för att skapa en ny ordbok från den sorterade listan med tupler.
Python3
testning och typer av testning
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}>
Tidskomplexitet: O(n log n) där n är antalet poster i ordboken.
Hjälputrymme: O(n) för att lagra den sorterade listan med tupler. dict()-konstruktorn tar O(n) tid att skapa en ny ordbok från den sorterade listan.