Словари в Python — сортировка по ключам

Привет всем! Как я обещал ранее — сегодня мы познакомимся с такой штукой, как сортировка по ключам в словарях. Кроме этого — мы попробуем разобраться с реверсом словаря — поменять местами ключи и их значения 🙂 Итак, поехали!

Прежде, чем разобраться с сортировкой — давайте познакомимся с циклом for, без которого эта самая сортировка не возможна. Цикл for — самый простой, но от этого не менее эффективный метод произвести обход всех элементов, и выполнять программный код для каждого из этих элементов. Переменная цикла, которую определяет пользователь нужна для ссылки на текущий элемент. Звучит несколько запутанно, а потому — посмотрите на код:

где:
spisok = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] — список, состоящий из 10 чисел
for i in spisok: — команда цикла, которая говорит: для каждого итератора i в списке spisok
print (i) — вывести на печать

Вместо списка может быть что угодно, и даже тексты. Например, код, представленный ниже — выведет на экран каждый символ из слов отдельно:

Можно даже вывести их в виде больших букв — для этого нужно использовать метод upper() — о нем я рассказывал чуть раньше, если интересно — можете поэксперементировать 🙂

Теперь, после того, как мы слегка разобрались с циклом for — нам будет не сложно представить себе механизм сортировки словаря по ключам.

Предположим, у нас имеется словарь, представляющий собой набор данных о сотруднике: имя, фамилия, возраст. Причем, указанные параметры являются ключами (ничто не мешает расширить список этих данных, но сейчас для простоты — работаем с этими тремя). В случае, если мы просто выведем на экран словарь — у нас получится нечто вроде:
{‘Имя’: ‘Василий’, ‘Фамилия’: ‘Иванов’, ‘возраст’: ’30} — что совсем не удобно, тем более, если мы будем работать с бОльшими объемами данных. Вот тут мы и подошли к механизму сортировки, использование которого позволит нам представить эти данные в виде удобоваримого текста:

где:
distionary = { — начало словаря с названием distionary
‘Имя’: ‘Василий’, — пара ‘Ключ-значение’ — Имя — Василий
‘Фамилия’: ‘Иванов’, — пара ‘Ключ значение’ — Фамилия — Иванов
‘возраст’: ’30’, — пара ‘Ключ — значение’ — Возраст — 30
} — конец словаря
for key in sorted(distionary): — цикл, который звучит так: для итератора key в цикле
print (key,’=>’,distionary[key]) — вывести на экран значение ключа key, и из словаря distionary — значение этого ключи.

Согласитесь — результат работы цикла for:
Имя => Василий
Фамилия => Иванов
возраст => 30

выглядит значительно более симпатично, нежели представленный ранее:
{‘Имя’: ‘Василий’, ‘Фамилия’: ‘Иванов’, ‘возраст’: ’30}

Итак, с сортировкой разобрались, а теперь разберемся с инвертированием пары ключ-значение. Иногда бывает так, что нужно поменять местами ключ, и вместо него использовать значение этого ключа. В нашем случае пара ‘Ключ — значение’ выглядит так:
Имя => Василий
Фамилия => Иванов
возраст => 30

в случае инвертирования у нас должна получиться вот такая штука:
30 => возраст
Василий => Имя
Иванов => Фамилия

На самом деле делается это очень просто. Смотрим код:

более подробно его можно представить вот так:
distionary = { — объявляем словарь с названием distionary
‘Имя’: ‘Василий’, — используем пару ‘Ключ-значение’, где Имя — ключ, Василий — значение
‘Фамилия’: ‘Иванов’, — используем пару ‘Ключ-значение’, где Фамилия — ключ, Иванов — значение
‘возраст’: ’30’, — используем пару ‘Ключ-значение’, где Возраст — ключ, 30 — значение
} — конец словаря
print (‘Выводим словарь как есть:’) — вывод уведомления о выводе словаря на экран

for key in distionary: — начинаем цикл for, который производит итерацию по значениям key в словаре distionary
print (key,’=>’,distionary[key]) — выводит на экран пару key — значение ключа
print (‘ ‘) — вывод пустой строки
print (‘Выводим инвертированный словарь:’) — вывод уведомления о выводе на экран инвертированного словаря
new_distionary = {value:key for key, value in distionary.items()} — создаем новый словарь с названием new_distionary, который формируется за счет цикла Значение — Ключ, производит итерацию по ключам и значению в словаре. Для этого используется метод items(), который возвращает список значений (для получения списка ключей используется метод keys() ).
for key in new_distionary: — начинаем цикл for, который итерирует по словарю new_distionary
print (key,’=>’,new_distionary[key]) — выводим на экран ключ (напомню, в новом словаре ключ — это значение из старого словаря), и значение (которое в старом словаре было ключом).

План на следующую запись, посвященную Python — представить код, генерирующий фейковых персонажей с данными: имя, фамилия, возраст, город проживания, номер паспорта, и его серия. К объектно-ориентированному программированию я пока еще не дошел, потому весь код будет работать в Repl.it и являть собой некую теоретическую задачу для работы с генератором случайных чисел, списками и словарями.

Спасибо за внимание!
В случае возникновения вопросов — пишите на почту. И не забывайте сделать репост на свою страницу, если запись понравилась 🙂