Словари¶
dict (от английского «dictionary», словарь) – еще один тип данных в Python. Словари хранят пары ключ : значение . То есть в списках можно достать элемент, если указать его позицию в виде целого числа, а в словарях – тот самый ключ . dict – тип данных, поэтому достать элемент по номеру не получится, но отображение содержимого будет элементов. ключей должна поддерживаться, чтобы всегда можно было быстро найти одно единственно верное значение .
В некоторых языках программирования можно встретить ассоциативные массивы – полную аналогию dict . Также вспомним базы данных, широко использующиеся во всём мире для хранения информации: в таблице можно установить первичный ключ, который уникально идентифицирует запись, как и ключ соответствует значению в словаре. Самый простой пример ключа — порядковый номер объекта!
Создание словаря¶
Использовать словарь стоит, когда нужно сохранять объекты с какими-то ключами и обращаться к объектам по известным ключам. Один из способов определения словаря: указание пар ключ : значение через^запятую внутри фигурных скобок <> . Напоминает set , правда? <> позволяет создать пустой словарь, но не пустое множество.
Например, решили упростить себе жизнь и больше не запоминать дни рождения коллег. Вместо этого, лучше хранить их в одном месте:
В примере dates имеет две пары значений. В первой паре строка «Кунг Фьюри» является ключом, а «1968-09-09» – его значением.
Получение значения по ключу¶
Чтобы получить значение по ключу, необходимо обратиться к переменной, содержащей словарь, и указать ключ в квадратных скобках [] :
Если указать неверный ключ в [] , Python будет ругаться: выбросит ошибку KeyError и перестанет выполнять код. Чуть ниже посмотрим, как можно избежать таких ситуаций.
Изменение и добавление значений¶
Синтаксис изменения значения по ключу и добавления нового ключа со значением одинаковый: в [] нужно указать ключ, поставить = и указать значение, которое теперь будет соответствовать ключу.
Если ключ уже был в словаре, значение по нему изменится на новое, а старое будет удалено. Указание нового ключа со значением добавляет пару в словарь.
Основные методы словаря¶
Проверка вхождения и get() ¶
Помните, ранее говорили, что обращение к несуществующему ключу приводит к ошибке? Пришло время посмотреть пару способов борьбы!
Можно проверить, есть ли интересующий ключ среди множества ключей словаря. Это делается при помощи бинарного оператора in . Слева должен быть указан ключ, справа – переменная со словарем:
В коде проверку можно использовать в условной конструкции if , чтобы принимать решение в зависимости от наличия ключа:
Теперь о методе get() : при помощи его тоже можно получать значения из словаря по ключу. KeyError никогда не появится: если ключа нет, по умолчанию возвращается None :
Вторым аргументом метода get() можно указать значение, которое должно возвращаться вместо None , когда ключ не был найден:
Что такое «длина словаря»?¶
Функция len() для словаря будет возвращать количество пар ключ : значение (их столько же, сколько ключей), которое в нём содержится:
Удаление из словаря¶
Есть несколько способов очистки в словаре: можно убирать по ключу, а можно сразу удалить все!
при помощи инструкции del (от английского «delete») можно удалить пару ключ : значение (удаление ключа эквивалентно удалению пары ключ : значение , так как теряем возможность найти то самое значение ), в общем виде:
Предположим, коллега из самого первого примера уволился и больше нет смысла хранить его день рождения:
pop() — метод, который достает значение, хранящееся по переданному ключу, и сразу удаляет ключ из словаря:
Для метода pop() есть возможность указать значение, которое будет возвращено при обращении к несуществующему ключу. Почти как get() , но всё-таки, без указания этого значения, pop() выбрасывает KeyError .
popitem() имеет схожее название, но не путайте с предыдущим методом: этот на вход не принимает ключ , а возвращает пару ключ : значение , которая была добавлена последней (такое поведение гарантируется с Python ).
clear() позволяет удалить сразу все ключи словаря, то есть полностью его очистить:
Обратите внимание на то, как работают методы pop() , popitem() и clear() : как только вызываются, словарь меняет свой состав (изменения происходят in place, то изменить по месту без копирования).
Обновление и добавление ключей¶
Лицезрели, что значения в словарь можно добавлять или менять, обращаясь по ключу. Python предоставляет возможность не писать кучу присваиваний, а использовать лаконичный метод update() , который на вход может принимать либо другой словарь, либо пары ключ : значение в какой-то последовательности (например, кортежи по два значения в списке: первое – ключ, второе – значение)
А что, если в update() передать пары, ключ которых уже был в словаре? Значения по дублирующимся ключам будут на новые:
Доступ к ключам и значениям¶
В Python можно без проблем извлекать отдельно по ключам или значениям, а также итерироваться по элементам словарей в цикле for . Осталось разобраться, как это работает.
Ключи¶
По умолчанию, в конструкциях вида
переменные цикла (тут – key ) будут принимать значения из множества словаря. Аналогично можно использовать метод keys() (позволяет достать все ключи), который явно говорит, что цикл идет по ключам, например:
Значения¶
При помощи метода values() можно получить все значения, хранящиеся по всем ключам словаря:
Напрямую по значению получить ключ нельзя.
Всё и сразу¶
Существует метод items() , который достает пары ключ : значение в виде последовательности кортежей. Его же часто удобно использовать в циклах, дабы не тащить длинную запись в виде названия словаря и квадратных скобок с ключом при обращении к значению:
Сортировка¶
Функция sorted() доступна и для словарей. По умолчанию ключи словаря поддерживают порядок, в котором были добавлены, но можно отсортировать их в нужном направлении (в зависимости от типа):
Когда в функции передаётся просто название переменной со словарем, работа идет только над множеством ключей.
Можно ли отсортировать словарь по значениям?
Да, можно попробовать самостоятельно разобраться с аргументами функции sorted() .
Что можно хранить¶
Теперь добавим немного технических подробностей: возможно, уже заметили самостоятельно, что dict может принимать в качестве ключа не всякое значение. На самом деле только объекты (можно вызвать функцию hash() и получить значение) могут быть ключами словаря, на значения это ограничение не распространяется. В dict и set значение хеша от объекта используется для поиска внутри структуры.
Ключом словаря нельзя сделать объект типа, например, list , set или сам dict , так как значение их хеша может измениться со временем. Неизменяемый кортеж может быть ключом только если не содержит внутри изменяемые объекты.
Изменяемость и неизменяемость¶
В англоязычной литературе изменяемые типы называют , а неизменяемые – , почитать документацию.
В Python всё есть объект. Когда пользователь присваивает значение переменной, она начинает ассоциироваться с ячейкой памяти, где лежит это значение. Переменная знает адрес, откуда можно получить значение. id() и hex() показывают адрес в памяти компьютера. id() — адрес в десятичном виде, а hex() поможет перевести в шестнадцатеричный.
Python Dictionaries | 6 Operations You Should Know
![]()
Dictionary is a built-in data type in python that is used to store the information in the form of key: value pairs. This blog will discuss all the important python dictionary concepts that you need to know.
Properties of a dictionary
Python dictionary is a collection that is ordered, changeable, and does not allow duplicates. Let’s…
Как добавить пару в словарь python
В Python имеется еще один составной тип данных, называемый словарем, который похож на список. Словарь (dict) — неупорядоченная коллекция произвольных объектов с доступом по ключу. Словарь более известен как ассоциативный массив. Словарь состоит из набора пар «Ключ-Значение». И в отличии от списка, где к каждому элементу можно обратиться по его порядковому номеру(индексу), в словаре обращение к элементу происходит по ключу.
Создание словаря
Вы можете определить словарь, включив в фигурные скобки список пар «Ключ-значение», разделенных запятыми. Двоеточие (:) отделяет каждый ключ от связанного с ним значения:
Пример: мы можем связать (ассоциировать) названия футбольной команды с городом, где она основана:
Доступ к значениям словаря
Для получения значения внутри пары вы должны обратиться по ключу dict[key]
Если попытаетесь обратиться к ключу, которого нет, получится исключение типа KeyError
Добавление нового элемента
Чтобы добавить новое значение в словарь, нужно обратиться по несуществующему ключу и присвоить в него значение
Изменение элемента
Чтобы изменить значение существующего ключа, нужно обратиться по этому ключу и присвоить новое значение
Удаление элемента
Чтобы удалить элемент словаря, нужно воспользоваться командой del
Операции со словарем
Нахождение длины словаря
Чтобы найти длину словаря(количество пар «ключ-значение»), нужно воспользоваться функцией len()
Проверка вхождения ключа в словарь
Для этого нужно воспользоваться командой in. Обратите внимание, что поиск происходит только среди ключей словаря
Методы словаря
Метод .clear()
Полностью очищает словарь
Метод .get(key [,default])
Метод, который принимает обязательный параметр — значение ключа. В случае, если данный ключ имеется в словаре, возвращается его значение. В противном случае вернется None, либо значение default (если оно было передено)
Метод .setdefault(key [,default])
Метод, который принимает обязательный параметр — значение ключа. Возвращает значение ключа, но если его нет создает ключ с значением default (по умолчанию None).
Метод .pop(key [,default])
Метод, который удаляет ключ и возвращает значение. Если ключа нет, возвращает default (по умолчанию бросает исключение).
Метод .keys()
Метод, который возвращает коллекцию всех ключей в словаре
Метод .values()
Метод, который возвращает коллекцию всех значений в словаре
Метод .items()
Метод, который возвращает коллекцию всех пар «ключ-значение»
Обход элементов словаря в цикле for
При обходе элементов в переменной i по умолчанию будут сохранятся значения ключей
Но, зная ключ, можно обратиться к значению этого ключа
Обойти только значения словаря можно при использовании метода .values()
При помощи метода .items() можно обходить элементы, получая сразу и ключ и значение
Словари и их методы в Python
Словарь — неупорядоченная структура данных, которая позволяет хранить пары «ключ — значение». Вот пример словаря на Python:
Данный словарь использует строки в качестве ключей, однако ключом может являться в принципе любой неизменяемый тип данных. Значением же конкретного ключа может быть что угодно. Вот ещё один пример словаря, где ключами являются числа, а значениями — строки:
Важное уточнение: если вы попробуете использовать изменяемый тип данных в качестве ключа, то получите ошибку:
Прим. перев. На самом деле проблема не с изменяемыми, а с нехэшируемыми типами данных, но обычно это одно и то же.
Получение данных из словаря
Для получения значения конкретного ключа используются квадратные скобки [] . Предположим, что в нашем словаре есть пара ‘марафон’: 26 .
Опять же, вы получите ошибку, если попытаетесь получить значение по несуществующему ключу. Для избежания подобных ошибок существуют методы, о которых мы сейчас поговорим.
Добавление и обновление ключей
Добавление новых пар в словарь происходит достаточно просто:
Обновление существующих значений происходит абсолютно также:
Удаление ключей
Для удаления ключа и соответствующего значения из словаря можно использовать del
Методы
Словари в Python имеют множество различных полезных методов, которые помогут вам в работе с ними. Вот лишь некоторые из них:
Update
Метод update() пригодится, если нужно обновить несколько пар сразу. Метод принимает другой словарь в качестве аргумента.
Если вас интересует, почему данные в словаре расположены не в том порядке, в котором они были внесены в него, то это потому что словари не упорядочены.
Метод get() возвращает значение по указанному ключу. Если указанного ключа не существует, метод вернёт None .
Метод можно использовать для проверки наличия ключей в словаре:
Также можно указать значение по умолчанию, которое будет возвращено вместо None , если ключа в словаре не окажется:
Метод pop() удаляет ключ и возвращает соответствующее ему значение.
Метод keys() возвращает коллекцию ключей в словаре.
Values
Метод values() возвращает коллекцию значений в словаре.
Items
Метод items() возвращает пары «ключ — значение».
Итерация через словарь
Вы можете провести итерацию по каждому ключу в словаре.
Очевидно, вместо story_count можно использовать story_count.keys() .
В примере кода ниже цикл for использует метод items() для получения пары «ключ — значение» на каждую итерацию.