Python, за допомогою словника виконує сортування на основі ключів або значень. [застосовний Python>=3.6v].
Введення : test_dict = {Gfg : 5, is : 7, Best : 2} Вихід : {‘Найкращий’: 2, ‘Gfg’: 5, ‘є’: 7}, {’є’: 7, ‘Gfg’: 5, ‘Найкращий’: 2} Пояснення : відсортовано за ключами в порядку зростання та у зворотному порядку. Введення : test_dict = {Найкращий: 2, для: 9, виродки: 8} Вихід : {«Найкращий»: 2, «Gfg»: 5, «за»: 9}, {«за»: 9, «виродки»: 8, «Найкращий»: 2} Пояснення : відсортовано за значеннями в порядку зростання та у зворотному порядку.
Випадок 1: сортування за ключами
Це завдання виконується за допомогою sorted(), у цьому ми витягуємо ключі, використовуючи 1-й індекс елементів словника, витягнутих за допомогою items(), і передаємо його в ключі як спеціальну лямбда-функцію для сортування за ключами. Reverse=True додається для виконання зворотного сортування.
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))> |
>
>Вихід
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}>
Випадок 2: сортування за значеннями
Це завдання можна виконати так само, як і вище, єдина відмінність полягає в тому, що для отримання значень 2-й елемент items() передається як компаратор.
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))> |
>
>Вихід
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}>
Спосіб №3: Використання collections.OrderedDict() і sorted()
Підхід
цей підхід використовує функцію sorted() для сортування словника за його значеннями в порядку зростання або спадання. Функція sorted() викликається за допомогою методу items() словника та ключової функції, яка повертає другий елемент кожного кортежу (тобто значення) або їх заперечення. Отриманий список кортежів передається конструктору OrderedDict() для створення нового впорядкованого словника з тими самими парами ключ-значення, що й вихідний словник, але відсортованим за значенням.
Алгоритм
1. Викличте функцію sorted() у словнику «test_dict», передаючи лямбда-функцію як аргумент «ключ».
2. Лямбда-функція приймає кожну пару ключ-значення як вхідні дані та повертає ключ або значення для сортування, залежно від бажаного порядку.
3. Використовуйте функцію sorted(), щоб повернути список відсортованих пар ключ-значення.
4. Передайте відсортований список конструктору OrderedDict(), щоб створити новий упорядкований словник.
5. Повернути замовлений словник.
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))> |
>
>Вихід
OrderedDict([('Best', 2), ('Gfg', 5), ('is', 7), ('geeks', 8), ('for', 9)]) OrderedDict([('for', 9), ('geeks', 8), ('is', 7), ('Gfg', 5), ('Best', 2)])>
Часова складність: O(N log N), де N – кількість пар ключ-значення в словнику.
Складність простору: O(N), оскільки ми створюємо новий упорядкований словник для зберігання відсортованих пар ключ-значення.
Спосіб 4: використовуйте метод sorted() із лямбда-функцією як ключовим параметром.
Ось кроки:
- Визначте словник для сортування.
- Використовуйте метод sorted(), щоб відсортувати словник за значеннями.
- Передайте лямбда-функцію як ключовий параметр методу sorted(), щоб вказати, що сортування має виконуватися за значеннями.
- Використовуйте конструктор dict(), щоб створити новий словник із відсортованого списку кортежів.
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))> |
>
>Вихід
{'Best': 2, 'Gfg': 5, 'is': 7, 'geeks': 8, 'for': 9} {'for': 9, 'geeks': 8, 'is': 7, 'Gfg': 5, 'Best': 2}>
Часова складність: O(n log n), де n – кількість елементів у словнику.
Допоміжний простір: O(n) для зберігання відсортованого списку кортежів. Конструктору dict() потрібно O(n) часу, щоб створити новий словник із відсортованого списку.