Словари

Допустим, у вас есть информация о дате рождения нескольких человек и вы хотите разработать программу, с помощью которой можно находить день рождения того или иного человека. В такой программе можно использовать список, элементы которого - даты рождения. Так как к значению конкретного элемента можно обратиться по его номеру (индексу), то для вывода на экран для рождения нужного вам человека необходимо знать соответствующий номер. Это неудобно и для устранения такого недостатка следует использовать не список, а такую структуру данных как словарь (dict).

Словарь в Python представляет собой совокупность пар "ключ-значение". Каждый ключ связывается с некоторым значением, и программа моет получить значение, связанное с заданным ключом. Значением может быть число, строка, список и даже другой словарь. Собственно, любой объект, создаваемый в программе Python, может стать значением в словаре.

В Python словарь заключается в фигурные скобки {}, в которых приводится последовательность пар "ключ-значение"

student = {'name': 'Василий', 'last_name': 'Иванов'}

Пара "ключ-значение" представляет данные, связанные друг с другом. Если вы укажете ключ, то Python вернет значение, связанное с этим ключом. Ключ отделяется от значения двоеточием, а отдельные пары разделяются запятыми. В словаре может храниться любое количество пар "ключ-значение".

Простейший словарь содержит ровно одну пару "ключ-значение", как в следующем примере

student = {'name': 'Василий'}

В этом словаре хранится ровно один фрагмент информации о студенте, а именно его имя. Строка 'name' является ключом в словаре; с этим ключом связано значение 'Василий'.

Обращение к значениям в словаре

Чтобы получить значение, связанное с ключом, укажите имя словаря, а затем ключ в квадратных скобках

student = {'name': 'Василий'}
print(student['name'])

Эта конструкция возвращает значение, связанное с ключом 'name' из словаря student.

Василий

Добавление новых пар "ключ-значение"

Словари относятся к динамическим структурам данных: в словарь можно в любой момент добавлять новые пары "ключ-значение". Для этого указывается имя словаря, за которым в квадратных скобках следует новый ключ с новым значением.

Добавим в словарь student еще два атрибута: номер группы и дату рождения.

student = {'name': 'Василий', 'last_name': 'Иванов'}
print(student)

student['group'] = 'АП-201'
student['dob'] = '01/10/2002'
print(student)

Окончательная версия словаря содержит четыре пары "ключ-значение".

{'name': 'Василий', 'last_name': 'Иванов'}
{'name': 'Василий', 'last_name': 'Иванов', 'group': 'АП-201', 'dob': '01/10/2002'}

Создание пустого словаря

В некоторых ситуациях бывает необходимо начать с пустого словаря, а затем добавлять в него новые элементы. Чтобы начать заполнение пустого словаря, определите словарь с пустой парой фигурных скобок, а затем добавляйте новые пары "ключ-значение" (каждая пара в отдельной строке).

student = {}
student['name'] = 'Василий'
student['last_name'] = 'Иванов'

Обычно пустые словари используются при хранении данных, введенных пользователем, или при написании код, автоматически генерирующего большое количество пар "ключ-значение".

Изменение значений в словаре

Чтобы изменить значение в словаре, укажите имя словаря с ключом в квадратных скобках, а затем новое значение, которое должно быть связано с этим ключом.

student = {}
student['name'] = 'Василий'
student['last_name'] = 'Иванов'
print(student)

student['name'] = 'Петр'
print(student)

Консоль выведет

{'name': 'Василий', 'last_name': 'Иванов'}
{'name': 'Петр', 'last_name': 'Иванов'}

Удаление пар "ключ-значение"

Когда информация, хранящаяся в словаре, перестает быть нужной, пару "ключ-значение" можно полностью удалить при помощи команды del. При вызове достаточно передать имя словаря и удаляемый ключ

student = {}
student['name'] = 'Василий'
student['last_name'] = 'Иванов'
print(student)

del student['name']
print(student)

Консоль выведет

{'name': 'Василий', 'last_name': 'Иванов'}
{'last_name': 'Иванов'}

Обращение к значениям с помощью функции get()

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

student = {}
student['name'] = 'Василий'
student['last_name'] = 'Иванов'

print(student['group'])

Консоль выведет

Traceback (most recent call last):
  File "C:/py/main.py", line 313, in <module>
    print(student['group'])
KeyError: 'group'

Чтобы избежать закрытия программы и вывода сообщения об ошибке, можно воспользоваться функцией get() для назначения значения по умолчанию, которое будет возвращено при отсутствии заданного ключа в словаре.

В первом аргументе метода get() передается ключ. Во втором необязательном аргументе можно передать значение, которое должно возвращаться при отсутствии ключа:

student = {}
student['name'] = 'Василий'
student['last_name'] = 'Иванов'

group = student.get('group', 'No group assigned!')
print(group)

Если ключ 'group' существует в словаре, вы получите соответствующее значение, если нет - будет получено значение по умолчанию. В данном случае ключ 'group' не существует, поэтом вместо ошибки выводится понятное сообщение.

No group assigned!

Если есть вероятность того, что запрашиваемый ключ не существует, возможно, стоит использовать метод get() вместо синтаксиса с квадратными скобками.

Если второй аргумент при вызовет get() опущен, а ключ не существует, то Python вернет специальное значение None - признак того, что значение не существует.

Перебор словаря

Словарь Python

Элементы словаря состоят из двух компонентов. Первый называется "ключ", второй - "значение". Аналогами словаря в Python являются различные "жизненные" словари (толковые, орфографические, лингвистические и так далее). В них ключом является слово - заголовок статьи, а значением - сама статья. Для того, чтобы получить доступ к статье, необходимо указать слово - ключ.

Простейшие примеры информации, которую в программе удобно хранить в виде словаря:

  • имя человека и дата его дня рождения;

  • номер авиарейса и аэропорт назначения;

  • название государства и его столица.

Ключом в словаре Python может быть любой так называемый "неизменяемый тип" данных, к которому относится число, символьная строка или кортеж (неизменяемый список).

Словарь - структура данных, предназначенная для объединения взаимосвязанной информации. Доступ к элементам словаря осуществляется не по индексу, а по ключу. В качестве ключа можно указать любой неизменяемый объект, например: число, строку или кортеж. Элементы словаря могут содержать элементы произвольного типа данных и иметь неограниченную степень вложенности.

До версии Python 3.6 порядок элементов в словаре был произвольным. Начиная с версии 3.6, элементы в словаре располагаются в порядке добавления их в словарь.

https://docs.python.org/3/whatsnew/3.6.html#whatsnew36-compactdict

Чтобы получить элемент, необходимо указать ключ, который использовался при сохранении значения.

Основные характеристики словарей Python

  1. Они поддерживают доступ по ключу, а не по смещению - словари временами называют ассоциативными массивами или хешами. Они ассоциируют набор значений с ключами, так что извлекать элемент из словаря можно с помощью ключа, под которым он был первоначально сохранен. Для получения компонентов из словаря применяется та же операция индексации, что и в случае списка, но индекса принимает форму ключа, а не относительного смещения.

  2. Они являются неупорядоченными коллекциями произвольных данных - в отличие от списка элементы, хранящиеся в словаре, не поддерживают какой-то определенный порядок; на самом деле для обеспечения быстрого поиска Python сохраняет их в псевдослучайном порядке. Ключи представляют символические (не физические) позиции элементов в словаре.

Last updated