Як відсортувати словник Python за ключем або значенням

У цьому посібнику ви дізнаєтеся, як сортувати словник 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 за ключем

Подивіться на наступне зображення меню десертів у кафе. Є два стовпці, що відповідають пунктам меню та їх відповідним цінам.

  Як захистити себе від атак заміни SIM-карт

Ви можете представити це у формі словника 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 лише за допомогою одного рядка коду.

  Як оновити дистрибутиви Debian [Guide]

▶️ Ось загальна конструкція для використання розуміння словника в 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 }, щоб створити словник sorted_desserts.

У цьому прикладі:

  • 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 лямбда-функція.

  Як додати штрих або пунктир до фігур і контурів у Photoshop

Примітка: лямбда-аргументи: вираз — це синтаксис для визначення лямбда-функцій у 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. Щасливого кодування!🎉