Python, mając słownik, wykonaj sortowanie na podstawie kluczy lub wartości. [ dotyczy Pythona>= 3,6 v ].
Wejście : test_dict = {Gfg: 5, wynosi: 7, Najlepszy: 2} Wyjście : {„Najlepszy”: 2, „Gfg”: 5, „jest”: 7}, {„jest”: 7, „Gfg”: 5, „Najlepszy”: 2} Wyjaśnienie : Posortowane według kluczy, w kolejności rosnącej i odwrotnej. Wejście : test_dict = {Najlepiej: 2, dla: 9, maniacy: 8} Wyjście : {‚Najlepszy’: 2, «Gfg»: 5, «dla»: 9}, {„dla”: 9, „geeks”: 8, „Najlepszy”: 2} Wyjaśnienie : Posortowane według wartości, w kolejności rosnącej i odwrotnej.
Przypadek 1: Sortuj według kluczy
To zadanie jest wykonywane za pomocą metody sorted(). W tym przypadku wyodrębniamy klucze przy użyciu pierwszego indeksu elementów słownika wyodrębnionych za pomocą items() i przekazujemy je do klucza jako niestandardową funkcję lambda, aby posortować według kluczy. Reverse=True jest dodawane w celu wykonania sortowania odwrotnego.
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))> |
>
>Wyjście
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}>
Przypadek 2: Sortuj według wartości
To zadanie można wykonać w podobny sposób jak powyżej, z tą tylko różnicą, że wyodrębnia wartości, drugi element items() jest przekazywany jako 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))> |
>
>Wyjście
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}>
Metoda nr 3: Korzystanie z kolekcji.OrderedDict() i sorted()
Zbliżać się
to podejście wykorzystuje funkcję sorted() do sortowania słownika według jego wartości w kolejności rosnącej lub malejącej. Funkcja sorted() jest wywoływana za pomocą metody items() słownika i funkcji klucza, która zwraca drugi element każdej krotki (tj. wartości) lub ich negację. Wynikowa lista krotek jest przekazywana do konstruktora OrderedDict() w celu utworzenia nowego uporządkowanego słownika z tymi samymi parami klucz-wartość co słownik oryginalny, ale posortowanymi według wartości.
Algorytm
1. Wywołaj funkcję sorted() w słowniku „test_dict”, przekazując funkcję lambda jako argument „klucz”.
2. Funkcja lambda przyjmuje każdą parę klucz-wartość jako dane wejściowe i zwraca klucz lub wartość, według której ma zostać posortowane, w zależności od żądanej kolejności.
3. Użyj funkcji sorted(), aby zwrócić listę posortowanych par klucz-wartość.
4. Przekaż posortowaną listę konstruktorowi OrderedDict(), aby utworzyć nowy uporządkowany słownik.
5. Zwróć zamówiony słownik.
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))> |
>
>Wyjście
OrderedDict([('Best', 2), ('Gfg', 5), ('is', 7), ('geeks', 8), ('for', 9)]) OrderedDict([('for', 9), ('geeks', 8), ('is', 7), ('Gfg', 5), ('Best', 2)])>
Złożoność czasowa: O(N log N), gdzie N to liczba par klucz-wartość w słowniku.
Złożoność przestrzeni: O(N), ponieważ tworzymy nowy uporządkowany słownik do przechowywania posortowanych par klucz-wartość.
Metoda 4: użyj metody sorted() z funkcją lambda jako parametrem kluczowym.
Oto kroki:
- Zdefiniuj słownik, który ma zostać posortowany.
- Aby posortować słownik według wartości, użyj metody sorted().
- Przekaż funkcję lambda jako parametr klucz do metody sorted(), aby określić, że sortowanie powinno odbywać się według wartości.
- Użyj konstruktora dict(), aby utworzyć nowy słownik na podstawie posortowanej listy krotek.
Python3
tablica obiektów w Javie
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))> |
>
>Wyjście
{'Best': 2, 'Gfg': 5, 'is': 7, 'geeks': 8, 'for': 9} {'for': 9, 'geeks': 8, 'is': 7, 'Gfg': 5, 'Best': 2}>
Złożoność czasowa: O(n log n) gdzie n to liczba pozycji w słowniku.
Przestrzeń pomocnicza: O(n) do przechowywania posortowanej listy krotek. Konstruktor dict() potrzebuje O(n) czasu na utworzenie nowego słownika z posortowanej listy.