Словари
Last updated
Last updated
В языке программирования Python словари (тип dict
) представляют собой еще одну разновидность структур данных наряду со списками и кортежами. Словарь - это изменяемый (как список) неупорядоченный (в отличие от строк, списков и кортежей) набор элементов "ключ:значение".
"Неупорядоченный" – значит, что последовательность расположения пар не важна, в следствие чего обращение к элементам по индексам невозможно.
В других языках структуры, схожие со словарями, называются по-другому. Например, в Java подобный тип данных называется отображением.
Чтобы представление о словаре стало более понятным, проведем аналогию с обычным словарем, например, англо-русским. На каждое английское слово в таком словаре есть русское слово-перевод: cat – кошка, dog – собака, table – стол и т. д. Если англо-русский словарь описать с помощью Python, то английские слова можно сделать ключами, а русские – их значениями:
Обратите внимание на фигурные скобки, именно с их помощью определяется словарь. Синтаксис словаря на Питоне описывается такой схемой:
В словаре доступ к значениям осуществляется не по индексам, а по ключам, которые заключаются в квадратные скобки (по аналогии с индексами списков):
Словари, как и списки, являются изменяемым типом данных: позволительно изменять, добавлять и удалять элементы (пары "ключ:значение"). Изначально словарь можно создать пустым (например, d = {}
) и потом заполнить его элементами. Добавление и изменение имеет одинаковый синтаксис: словарь[ключ] = значение
. Ключ может быть как уже существующим (тогда происходит изменение значения), так и новым (происходит добавление элемента словаря). Удаление элемента осуществляется с помощью встроенной оператора del
языка Python.
В словаре не может быть двух элементов с одинаковыми ключами. Однако могут быть одинаковые значения у разных ключей.
Ключом может быть любой неизменяемый тип данных. Значением – любой тип данных. Значения словарей вполне могут быть структурами, например, другими словарями или списками.
Элементы словаря перебираются в цикле for
также, как элементы других сложных объектов. Однако "по-умолчанию" извлекаются только ключи:
Но по ключам всегда можно получить значения:
С другой стороны у словаря как класса есть метод items()
, который создает особую структуру, состоящую из кортежей. Каждый кортеж включает ключ и значение:
В цикле for
можно распаковывать кортежи, таким образом сразу извлекая как ключ, так и его значение:
Методы словаря keys()
и values()
позволяют получить отдельно перечни ключей и значений. Так что если, например, надо перебрать только значения или только ключи, лучше воспользоваться одним из этих методов:
Кроме рассмотренных выше трех методов items()
, keys()
и values()
словари обладают еще восемью. Это методы clear()
, copy()
, fromkeys()
, get()
, pop()
, popitem()
, setdefault()
, update()
.
Метод clear()
удаляет все элементы словаря, но не удаляет сам словарь. В итоге остается пустой словарь:
Словарь – это изменяемый тип данных. Следовательно, как и список он передается в функцию по ссылке. Поэтому иногда, чтобы избежать нежелательного изменения глобального словаря его копируют. Это делают и с другими целями.
Метод fromkeys()
позволяет создать словарь из списка, элементы которого становятся ключами. Применять метод можно как классу dict
, так и к его объектам:
Метод get()
позволяет получить элемент по его ключу:
Равносильно nums[1]
.
Метод pop()
удаляет из словаря элемент по указанному ключу и возвращает значение удаленной пары. Метод popitem()
не принимает аргументов, удаляет и возвращает произвольный элемент.
С помощью setdefault()
можно добавить элемент в словарь:
Равносильно nums[4] = 'four'
, если элемент с ключом 4 отсутствует в словаре. Если он уже есть, то nums[4] = 'four'
перезапишет старое значение, setdefault()
– нет.
С помощью update()
можно добавить в словарь другой словарь:
Также метод обновляет значения существующих ключей. Включает еще ряд особенностей.
Создайте словарь, связав его с переменной school, и наполните данными, которые бы отражали количество учащихся в разных классах (1а, 1б, 2б, 6а, 7в и т. п.). Внесите изменения в словарь согласно следующему: а) в одном из классов изменилось количество учащихся, б) в школе появился новый класс, с) в школе был расформирован (удален) другой класс. Вычислите общее количество учащихся в школе.
Создайте словарь, где ключами являются числа, а значениями – строки. Примените к нему метод items()
, полученный объект dict_items
передайте в написанную вами функцию, которая создает и возвращает новый словарь, "обратный" исходному, т. е. ключами являются строки, а значениями – числа.