[МУЗЫКА] Продолжаем разговор про неупорядоченные типы данных. И сегодня мы познакомимся с новым типом данных — это словарь. Словарь нам очень помогает, когда мы решаем задачи, где какие-то элементы нужно хранить парами. На самом деле, с такими задачами мы сталкиваемся каждый день. Так, в записной книжке мы храним имя человека и номер телефона, по которому мы можем ему дозвониться. В словаре мы храним слово и его перевод. В библиотечном каталоге у нас есть автор и книга, которую он написал. Или даже список книг, если автор написал много. Если мы учитываем наши расходы, мы записываем дату и количество денег, которое мы потратили. Или, например, в медиатеке у нас хранится название песни и отметка, лайкнули мы ее или нет. А в базе данных магазина название продукта может храниться с его ценой. Словарь является неупорядоченным типом данных, и он как раз позволяет нам сохранять вот это соответствие каких-то двух элементов. И вот здесь в примере у меня как раз наш любимый список покупок, только теперь у каждого продукта через двоеточие записана его цена. То есть мы знаем не только то, что мы хотим купить, но и сколько денег нам придется потратить. Давайте посмотрим на синтаксис словаря в Python. Фигурные скобки и перечисляем элементы. Обратите внимание — фигурные скобки мы уже использовали. В принципе, неудивительно, виды скобок кончились: квадратные мы использовали для списка, круглые для кортежа, фигурные для множества. Для словаря тоже сгодились. Как же Python понимает, что мы хотим создать словарь, а не множество? Здесь у нас одним элементом будет на самом деле пара из элементов, разделенная двоеточием, и такая пара элементов будет называться ключ : значение. До двоеточия «ключ», после двоеточия — «значение». Подробнее про это поговорим дальше. Словарь — изменяемый тип данных. Это значит — мы можем вносить в него изменения, добавлять или удалять элементы, даже изменять их. И словарь, как и множество, — неупорядоченный тип данных. Значит, индексация с ним работать не будет, мы не сможем обратиться к элементу по его порядковому номеру. Давайте подробнее поговорим про вот эту терминологию, ключ : значение, потому что эти выражения мы будем использовать теперь очень часто. Посмотрим на наш словарь. У меня там есть 'хлеб' : 30.0 (предположим, это его цена, 30 рублей), запятая, элемент закончился, закончилась одна пара. Теперь 'молоко' : 59.90. Хлеб стоит 30 рублей, молоко — 59.90. Храним вместе название продукта и его цену. То, что идет до двоеточия в каждой паре, называется ключом. То есть ключи в моем словаре — это хлеб и молоко. То, что идет вторым элементом в паре, после двоеточия, называется значением. В моем словаре два значения — 30 и 59.90. Ключу «хлеб» соответствует значение 30, ключу «молоко» соответствует значение 59.90. Давайте поговорим о том, как создать пустой словарь. Во-первых, мы можем использовать функцию dict() без аргументов. Ничего удивительного — функция по названию типа данных, без аргументов, пустой список, пустое множество мы создавали точно так же. И пустой словарь мы можем создать пустыми фигурными скобками. Мы про это говорили, когда говорили про множества, что пустые фигурные скобки создают нам пустой словарь, не пустое множество. Вернемся к ключам и значениям. На самом деле, здесь есть некоторые ограничения. Ключи в словаре могут быть только уникальные, и из-за особенностей хранения словаря в компьютере ключи могут быть только неизменяемыми типами данных. То есть множество или список или сам словарь ключом быть не может. А вот значением может быть все что угодно из того, что мы знаем. Когда мы смотрели пример 'хлеб' : 30.0, 'молоко' : 59.90, я говорила такие слова, что хлеб соответствует 30, молоко соответствует 59.90. И мы по ключу можем обратиться к значению. Обратите внимание: ключ я использую в квадратных скобках, как мы использовали индексы, когда работали с последовательностями. Да, с нашими словарями не работает индексация. Мы не можем обратиться к нулевому или первому элементу, потому что Python не знает, какой из них нулевой, какой первый. Но, в отличии от множества, где мы никак не могли обратиться к элементу, кроме того, как перебрав их в цикле, в словаре мы можем обратиться к значению по его ключу. Например, я могу вывести цену хлеба, 30, или вывести цену молока, 59.90. Если мы обратимся к какому-то ключу, которого в словаре нет, то мы получим ошибку. Например, я обращаюсь к ключу 30 — получаю ошибку KeyError. Это значит, что в словаре нет такого ключа, не получилось достать значение, ему соответствующее. Эта ошибка очень похожа на то, когда мы пытались обратиться к элементу списка по индексу, которого уже не существует. Например, к индексу «4» в списке из трех элементов. И обратите внимание, здесь в качестве ключа я использовала значение, то есть как будто бы этот элемент есть в нашем словаре. Но такое обращение работает только по ключам, поэтому мы все равно получили ошибку. И с ключами мы можем делать проверку. Мы можем проверить, есть ли в словаре какой-то ключ или нет. И это, например, нам поможет избежать таких проблем, как на предыдущем слайде — нечаянно обратиться к ключу, которого в словаре нет. Например, я проверяю: 'хлеб' входит в ключи словаря. 'Хлеб' in d # (да, то, что 'хлеб' входит в d) — значит, 'хлеб' входит в ключи словаря d. Это истина, он действительно там есть. 'Сыр' входит в ключи словаря d? Это ложь, 'сыра' там нет. 30.0 входит в ключи словаря d? Это тоже ложь. Да, 30 — значение, но в список ключей оно не входит. Итак, мы с вами поговорили про то, что такое словарь, обсудили то, что в словаре элементы хранятся парами, и то, что к значению мы можем обратиться по ключу и проверить, является ли что-то ключом в словаре. Давайте посмотрим, как со словарями работать в Python. [МУЗЫКА]