Букварь
Как мы ищем слова в словаре? Мы знаем, что они отсортированы в алфавитном порядке; это позволяет нам перейти на соответствующую страницу и найти наше слово. Словари 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() круче, чем вы думаете:
Нам дается следующее предложение: «Сегодня ночью будет полнолуние. Будет красиво!»
Мы хотим посчитать количество гласных в этом предложении. Как мы приступим к этому? Давайте сначала посмотрим на код, а потом распаковываем его:
- В строках 3 и 4 мы инициализируем наше предложение и создаем пустой словарь.
- Мы инициализируем список гласных.
- Перебирая предложение по символу, мы проверяем, является ли текущий символ гласным. Для этого мы используем ключевое слово in.
- Если это так, мы увеличиваем его значение в словаре с помощью get() и значением по умолчанию, равным нулю. Это имеет смысл, потому что, если мы не встретили определенный символ раньше, он не существует в
vowel_count
, и, следовательно, его счетчик равен 0. Когда мы встречаем его в первый раз, мы увеличиваем его значение на 1, так что теперь значение этого символа равно 1. Если мы встретим его еще раз в предложении, мы снова добавим 1 и так далее. - Повторяйте 3 и 4, пока не дойдете до конца предложения.
Подключение списков и словарей
Если хорошенько подумать, доступ к элементам в списках на самом деле не отличается от доступа к элементам в словарях. Единственное отличие состоит в том, что списки следуют нулевой индексации, а словари индексируются по ключам. Мы используем одни и те же квадратные скобки для доступа к ним. Вот хорошая иллюстрация, поясняющая аналогию:
Мы могли бы повеселиться с этими двумя структурами данных в тандеме. Допустим, вместо словаря вам дали два списка — один с количеством предметов, а другой с оценками.
Мы успешно воссоздали marks
, используя два списка. метод zip() позволил нам создать список кортежей, а метод dict() преобразовал этот список кортежей в пары ключ-значение, то есть в наш словарь.
Это обертка!
Итак, мы рассмотрели довольно много:
- Что такое словари и как мы их создаем в Python
- Доступ к ключам.
- Создание и удаление ключей.
- Такие методы, как keys(), values(), items().
- Метод get().
- Создание словарей из списков.
Если вам понравилось, хлопайте и подписывайтесь! Я буду очень благодарна.