Букварь

Как мы ищем слова в словаре? Мы знаем, что они отсортированы в алфавитном порядке; это позволяет нам перейти на соответствующую страницу и найти наше слово. Словари Python работают точно так же — слово, которое вы ищете, является «ключом», а значение слова — «значением», и поэтому мы называем словари «парами ключ-значение». У каждого уникального ключа есть значение, точно так же, как у каждого уникального слова в английском языке есть значение. Точно так же, как у нас есть синонимы, словари могут содержать ключи со схожими значениями, но сами ключи должны быть уникальными, как уникально каждое английское слово.

Единственная разница между нашим любимым оксфордским словарем и словарем Python заключается в том, что ключи не обязательно сортируются в словаре Python. Так как они представлены?

Представьте, что вы сдаете выпускные экзамены. Вы направляетесь в экзаменационный зал, у вас с собой уникальный студенческий билет. Вы знаете, что вам выделили уникальное кресло. Так что вы просто спрашиваете наблюдателя, где стоит ваш стул, или просто ищете его на карте.

Словари Python существуют в памяти точно так же, как таблицы поиска.

Так как же нам создать словарь? Как и все в Python, это просто:

your_dict = {key_1 : value_1, key_2 : value_2}

Мы используем фигурные скобки для представления словарей. Мы отделяем каждый ключ от его значения двоеточием. Уникальные ключи разделяем запятой. Вот и все.

Словари Python также имеют встроенный метод len() для получения количества присутствующих уникальных пар ключ-значение:

print len(your_dict)
2

Получение ключей и значений

Создадим словарь оценок, полученных по разным предметам. Как получить доступ к ключам и значениям?

Доступ к значениям

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

Ключевое слово in проверяет принадлежность определенного ключа к словарю и возвращает логический объект, то есть True или False. В этом случае слова «французский» в нашем словаре нет, поэтому мы получаем False.

Мы используем квадратные скобки для доступа к ключам в словаре. Ладно, парень хорошо сдал экономику. Как насчет всех предметов? Оказывается, есть два способа сделать это. Я написал оба ниже:

Словари Python имеют встроенную функцию items(), которая генерирует как ключи, так и соответствующие значения, присутствующие в словаре. Хотя оба метода верны, второй метод немного более элегантен, не так ли? Мы перебираем словарь как по ключу, так и по значению, а не только по ключу.

Добавление и удаление значений

Оказывается, ваш ребенок сдал еще один экзамен по биологии и набрал 80 баллов. Как бы вы прибавили это значение к marks?

marks['Biology'] = 85
print marks
{'Biology': 80, 'Economics': 95, 'English': 85, 'Chemistry': 90, 'Physics': 91, 'Math': 90}

Мы успешно добавили новое значение в наш словарь. Как удалить значение? Ваш ребенок плохо успевал по биологии, поэтому, чтобы избавить себя от позора, вы решаете удалить его. Помните ключевое слово del?

del marks['Biology']
print marks
{'Economics': 95, 'English': 85, 'Chemistry': 90, 'Physics': 91, 'Math': 90}

Вы также можете использовать метод pop():

marks.pop('English')
85

Давайте попробуем вытолкнуть несуществующий ключ:

marks = {'Economics': 95, 'English': 85, 'Chemistry': 90, 'Physics': 91, 'Math': 90}
marks.pop('Latin')
Traceback (most recent call last):
  File "main.py", line 3, in <module>
    marks.pop('Latin')
KeyError: 'Latin'

Как вы, наверное, догадались, компилятор выдает «KeyError».

Использование get() вместо dict[key]:

В словарях Python есть метод доступа к значению определенного ключа в словаре — get().

Преимущество этого метода в том, что программист может указать сообщение по умолчанию, которое должно быть возвращено в случае отсутствия ключа в словаре. Как мы видели ранее, доступ/извлечение ключа, которого нет, вызывает KeyError. Мы можем смягчить это, используя get():

print marks.get(‘Latin’, “Subject not taken”)
Subject not taken

get() круче, чем вы думаете:

Нам дается следующее предложение: «Сегодня ночью будет полнолуние. Будет красиво!»

Мы хотим посчитать количество гласных в этом предложении. Как мы приступим к этому? Давайте сначала посмотрим на код, а потом распаковываем его:

  1. В строках 3 и 4 мы инициализируем наше предложение и создаем пустой словарь.
  2. Мы инициализируем список гласных.
  3. Перебирая предложение по символу, мы проверяем, является ли текущий символ гласным. Для этого мы используем ключевое слово in.
  4. Если это так, мы увеличиваем его значение в словаре с помощью get() и значением по умолчанию, равным нулю. Это имеет смысл, потому что, если мы не встретили определенный символ раньше, он не существует в vowel_count, и, следовательно, его счетчик равен 0. Когда мы встречаем его в первый раз, мы увеличиваем его значение на 1, так что теперь значение этого символа равно 1. Если мы встретим его еще раз в предложении, мы снова добавим 1 и так далее.
  5. Повторяйте 3 и 4, пока не дойдете до конца предложения.

Подключение списков и словарей

Если хорошенько подумать, доступ к элементам в списках на самом деле не отличается от доступа к элементам в словарях. Единственное отличие состоит в том, что списки следуют нулевой индексации, а словари индексируются по ключам. Мы используем одни и те же квадратные скобки для доступа к ним. Вот хорошая иллюстрация, поясняющая аналогию:

Мы могли бы повеселиться с этими двумя структурами данных в тандеме. Допустим, вместо словаря вам дали два списка — один с количеством предметов, а другой с оценками.

Мы успешно воссоздали marks, используя два списка. метод zip() позволил нам создать список кортежей, а метод dict() преобразовал этот список кортежей в пары ключ-значение, то есть в наш словарь.

Это обертка!

Итак, мы рассмотрели довольно много:

  1. Что такое словари и как мы их создаем в Python
  2. Доступ к ключам.
  3. Создание и удаление ключей.
  4. Такие методы, как keys(), values(), items().
  5. Метод get().
  6. Создание словарей из списков.

Если вам понравилось, хлопайте и подписывайтесь! Я буду очень благодарна.