У цьому посібнику ви дізнаєтеся, як сортувати словник Python за його ключем або значенням.
Коли ви працюєте зі словником у Python, іноді вам потрібно відсортувати його вміст — за ключем або значенням. Оскільки словник Python є зіставленням ключів і значень, ви створите новий словник, який містить ключі та значення, відсортовані за потреби.
У цьому посібнику ми почнемо з огляду основ словника Python. Потім ми навчимося створювати новий словник, у якому вміст буде відсортовано за ключем або значенням, залежно від потреби.
Основи словника Python, перегляд
Що таке словник Python?
Словник — це вбудована структура даних у Python. Він зберігає елементи як пари ключ-значення. Ви можете використовувати клавіші для пошуку відповідних значень. Оскільки ключі однозначно ідентифікують значення, ключі не повинні повторюватися.
py_dict = {"Python":"cool!","Learn":True} py_dict["Python"] # Output: cool! py_dict["Learn"] # Output: True
Функціонально словник схожий на хеш-карту. Тому це не обов’язково впорядкована структура даних. Ви можете отримати доступ до вмісту словника в будь-якому довільному порядку, якщо вам відомі ключі.
Порядок елементів у словнику
У попередніх версіях Python ви повинні були використовувати OrderedDict щоб зберегти порядок клавіш. Однак, починаючи з Python 3.7, ви можете отримати доступ до елементів у тому ж порядку, у якому ви додаєте їх до словника.
Тепер, коли ви вивчили основи словників Python, давайте навчимося створювати відсортовані копії словника.
⚙️ Примітка. Вам потрібен Python 3.7 або новішої версії, щоб код у цьому посібнику працював належним чином. Ви можете завантажити остання версія Pythonабо запустіть приклади в онлайн-редакторі Python techukraine.net.
Як відсортувати словник Python за ключем
Подивіться на наступне зображення меню десертів у кафе. Є два стовпці, що відповідають пунктам меню та їх відповідним цінам.
Ви можете представити це у формі словника Python, зібравши назви елементів як ключі та їхні ціни як значення.
Давайте створимо словникові десерти, як показано нижче.
desserts = { "Ice cream":10, "Brownies":12, "Cheesecake":3, "Swiss roll":5, "Cookies":4, "Cup cake":2 }
Далі створимо словник sorted_desserts, де десерти розташовані в алфавітному порядку. В оригінальному словнику десертів ключовими є назви десертів. Тож вам слід відсортувати ці ключі в алфавітному порядку, щоб створити новий словник.
Як отримати доступ до ключів словника Python
Для цього ми спочатку отримаємо ключі словника, а потім відсортуємо їх в алфавітному порядку.
У Python ви можете використовувати метод вбудованого словника .keys(), щоб отримати список усіх ключів у словнику.
Давайте викличемо метод .keys() у словнику десертів, щоб отримати ключі, як показано нижче.
keys = desserts.keys() print(keys) #Output ['Ice cream', 'Brownies', 'Cheesecake', 'Swiss roll', 'Cookies', 'Cup cake']
Виклик вбудованої функції sorted() Python зі списком як аргумент повертає новий відсортований список.
Далі викличемо функцію sorted() із ключами списку як аргумент і збережемо відсортований список у змінній sorted_keys.
sorted_keys = sorted(keys) print(sorted_keys) # Output ['Brownies', 'Cheesecake', 'Cookies', 'Cup cake', 'Ice cream', 'Swiss roll']
Тепер, коли ми маємо ключі, відсортовані в алфавітному порядку, ми можемо знайти значення, що відповідають ключам у sorted_keys у словнику десертів, як показано нижче.
sorted_desserts = {} for key in sorted_keys: sorted_desserts[key] = desserts[key] print(sorted_desserts) # Output {'Brownies': 12, 'Cheesecake': 3, 'Cookies': 4, 'Cup cake': 2, 'Ice cream': 10, 'Swiss roll': 5}
Давайте розширимо наведений вище блок коду:
- Ініціалізуйте sorted_desserts як порожній словник Python.
- Перегляньте список ключів sorted_keys.
- Для кожного ключа в sorted_keys додайте запис у sorted_desserts, знайшовши відповідне значення в словнику десертів.
Використання такого циклу for вважається багатослівним. У Python є більш стисла альтернатива, яка використовує розуміння словника.
Розуміння словника в Python
Python підтримує використання словникового розуміння, подібного до розуміння списку. Розуміння словника дозволяє створити новий словник Python лише за допомогою одного рядка коду.
▶️ Ось загальна конструкція для використання розуміння словника в Python.
# 1. when you have both keys and values in two lists: list1, list2 new_dict = {key:value for key,value in zip(list1,list2)} # 2. when you have the keys, and can look up the values new_dict = {key:value for key in <iterable>}
Скористаємося другою конструкцією у наведеній вище комірці: new_dict = {key:value for key in
У цьому прикладі:
- iterable: список sorted_keys
- ключ: ключ, до якого ми отримуємо доступ, проходячи через sorted_keys
- значення: знайдіть значення, що відповідає ключу, зі словника десертів, десерти[key]
Зібравши все разом, ми маємо вираз для розуміння словника, як показано нижче.
sorted_desserts = {key:desserts[key] for key in sorted_keys} print(sorted_desserts) {'Brownies': 12, 'Cheesecake': 3, 'Cookies': 4, 'Cup cake': 2, 'Ice cream': 10, 'Swiss roll': 5}
З наведених вище результатів десерти впорядковано в алфавітному порядку в словнику sorted_desserts.
Як відсортувати словник Python за значенням
Далі ми навчимося сортувати словник Python за його значеннями.
У словнику десертів значення відповідають цінам на десерти. Ви можете відсортувати словник за цінами в порядку зростання або зменшення.
▶️ Ви можете використовувати вбудований метод словника .items(), щоб отримати всі пари ключ-значення. Кожен кортеж є парою ключ-значення.
desserts.items() dict_items([('Ice cream', 10), ('Brownies', 12), ('Cheesecake', 3), ('Swiss roll', 5), ('Cookies', 4), ('Cup cake', 2)])
Кожен з елементів сам по собі є кортежем. Таким чином, ви також можете індексувати кожну пару ключ-значення, щоб отримати доступ до ключів і значень окремо.
dict_items = desserts.items() for item in dict_items: print(f"key:{item[0]},value:{item[1]}") # Output key:Ice cream,value:10 key:Brownies,value:12 key:Cheesecake,value:3 key:Swiss roll,value:5 key:Cookies,value:4 key:Cup cake,value:2
Оскільки ми хотіли б сортувати за значеннями, ми скористаємося наведеним вище методом, щоб отримати значення з індексом 1 у парі ключ-значення.
Як відсортувати значення словника Python у порядку зростання
Цього разу ми використаємо функцію sorted() разом із необов’язковим параметром ключа. ключ може бути будь-якою функцією Python, вбудованою функцією, функцією, визначеною користувачем, або навіть a лямбда-функція.
Примітка: лямбда-аргументи: вираз — це синтаксис для визначення лямбда-функцій у Python.
У цьому прикладі сортування десертів за ціною ми маємо доступ до словникових елементів (пар ключ-значення). Ми встановимо key = lambda item:item[1] оскільки ми хотіли б відсортувати за значенням (ціною).
Оскільки функція sorted() повертає список за замовчуванням, вам слід явно перевести його в dict, як показано нижче.
sorted_desserts = dict(sorted(desserts.items(), key=lambda item:item[1])) print(sorted_desserts) {'Cup cake': 2, 'Cheesecake': 3, 'Cookies': 4, 'Swiss roll': 5, 'Ice cream': 10, 'Brownies': 12}
Ви також можете переписати за допомогою розуміння словникаяк обговорювалося раніше.
sorted_desserts = {key:value for key, value in sorted(desserts.items(), key=lambda item:item[1])} print(sorted_desserts) # Output {'Cup cake': 2, 'Cheesecake': 3, 'Cookies': 4, 'Swiss roll': 5, 'Ice cream': 10, 'Brownies': 12}
У sorted_desserts торт Cup Cake за 2 долари є першим продуктом, а брауні за ціною 12 доларів є останнім.
Як відсортувати значення словника Python у порядку зменшення
Якщо ви хочете відсортувати ціни в порядку зменшення, ви можете встановити необов’язковий зворотний параметр на True, як пояснюється нижче.
sorted_desserts = dict(sorted(desserts.items(), key=lambda item:item[1], reverse=True)) print(sorted_desserts) # Output {'Brownies': 12, 'Ice cream': 10, 'Swiss roll': 5, 'Cookies': 4, 'Cheesecake': 3, 'Cup cake': 2}
Тепер sorted_desserts відсортовано в порядку зменшення цін, починаючи з найдорожчого десерту Брауні вартістю 12 доларів.
Підсумок 👩🏽💻
Давайте швидко підсумуємо все, що ми навчилися в цьому підручнику.
- Словник Python зберігає дані в парах ключ-значення; усі ключі мають бути унікальними.
- У процесі сортування словника за ключем або значенням ми створюємо новий словник, який сортується за потреби.
- Ви можете використовувати вбудовані методи словника, .keys() і .items(), щоб отримати всі ключі та пари ключ-значення відповідно.
- Ви можете використовувати функцію sorted() разом із необов’язковим ключем параметрів і навпаки, щоб досягти бажаного сортування.
Тепер, коли ви навчилися сортувати словник Python, навчіться сортувати списки Python. Щасливого кодування!🎉