dict (словарь)
Словарь — изменяемый объект-отображение.
dict([obj, ][**kwargs])
obj -- Первым необязательным позиционным аргументом может являться отображение или итерирующийся объект (при этом каждый его элемент должен быть тоже итерирующемся и содержать ровно два объекта).
**kwargs -- Поддерживаются также необязательные именованные аргументы. При использовании вкупе с позиционными аргументами и совпадении ключей значениями из именованных пользуются приоритетом.
**kwargs -- Поддерживаются также необязательные именованные аргументы. При использовании вкупе с позиционными аргументами и совпадении ключей значениями из именованных пользуются приоритетом.
Словари являются отображениями.
Словари являются изменяемыми объектами.
В коде словари могут быть объявлены при помощи фигурных скобок — {} .
Кроме того, можно объявить их при помощи конструктора dict().
Ключами словаря могут являться только объекты, поддерживающие хеширование. Таким образом, использовать в качестве ключей списки, словари и другие изменяемые типы не получится.
Если в словарь будут добавлены несколько значений с одним и тем же ключом, словарь сохранит последнее.
Порядок ключей
Данные в обычном словаре упорядочены по очередности добавления ключей, начиная с +py3.6 (в +py2.7 — не упорядочены, но последовательность детерминирована, воспроизводима; в +py3.5 — не упорядочены, последовательность не детерминирована, не воспроизводима между запусками).
Если требуется хранить порядок, в котором в словарь были добавлены элементы (например для обхода этих элементов), следует использовать collections.OrderedDict().
В качестве значений могут использоваться любые объекты.
Получение значений
Доступ к значениям производится при помощи ключей.
Если ключ отсутствует в словаре, возбуждается исключение KeyError.
+py2.5 Чтобы изменить это поведение можно в наследнике dict определить метод __missing__(key), в котором описать нужные действия при отсутствии ключа.
Установка значений
Кроме установки значений при создании словаря, можно дополнять его по мере надобности.
+py2.2 Определить, присутствует ли ключ в словаре можно при помощи конструкции in.
+py2.2 Определить, отсутствует ли ключ в словаре можно при помощи антонимичной конструкции not in.
Количество элементов можно получить, используя функцию len().
Словари реализованы при помощи динамических хеш-таблиц. По сравнению с двоичными деревьями, это, в большинстве случаев, даёт выигрыш при получшении значений (наиболее часто используемая операция); кроме этого упрошается реализация.
Для каждого ключа при помощи функции hash() вычисляется хеш-код. Код этот широко варьируется в зависимости от ключа и данных процесса (например, хеш для «Python» может быть
Словари являются изменяемыми объектами.
Объявление
В коде словари могут быть объявлены при помощи фигурных скобок — {} .
my_dict = {
'key': 'value',
'sub_dict': {},
2: [1, 2, 3, 4],
}
# Словарь как слияние других словарей
dict_one = {'a': 1}
dict_two = {'b': 2}
my_dict = {
**dict_one,
**dict_two,
} # {'a': 1, 'b': 2}
Кроме того, можно объявить их при помощи конструктора dict().
# Пустой словарь.
my_dict = dict()
# Словарь из итерирующегося объекта.
my_dict = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
# Словарь из именованных аргументов.
my_dict = dict(one=1, two=2, three=3)
# Словарь из списка кортежей.
my_dict = dict([('two', 2), ('one', 1), ('three', 3)])
Ключи
Ключами словаря могут являться только объекты, поддерживающие хеширование. Таким образом, использовать в качестве ключей списки, словари и другие изменяемые типы не получится.
Если в словарь будут добавлены несколько значений с одним и тем же ключом, словарь сохранит последнее.
Внимание
Не рекомендуется использоваться в качестве ключей числа с плавающей запятой, так как они хранятся в памяти в виде приближений.
Порядок ключей
Данные в обычном словаре упорядочены по очередности добавления ключей, начиная с +py3.6 (в +py2.7 — не упорядочены, но последовательность детерминирована, воспроизводима; в +py3.5 — не упорядочены, последовательность не детерминирована, не воспроизводима между запусками).
Если требуется хранить порядок, в котором в словарь были добавлены элементы (например для обхода этих элементов), следует использовать collections.OrderedDict().
Значения
В качестве значений могут использоваться любые объекты.
Получение значений
Доступ к значениям производится при помощи ключей.
Если ключ отсутствует в словаре, возбуждается исключение KeyError.
+py2.5 Чтобы изменить это поведение можно в наследнике dict определить метод __missing__(key), в котором описать нужные действия при отсутствии ключа.
my_dict = {'key': 'value'}
my_value = my_dict['key'] # value
Установка значений
Кроме установки значений при создании словаря, можно дополнять его по мере надобности.
my_dict = {'key': 'value'}
my_dict['new_key'] = 'new_value' # Добавляем новый элемент словаря.
Определение наличия/отсутствия элемента
+py2.2 Определить, присутствует ли ключ в словаре можно при помощи конструкции in.
+py2.2 Определить, отсутствует ли ключ в словаре можно при помощи антонимичной конструкции not in.
my_dict = {'key': 'value'}
# in
# Ключ 'key' существует, поэтому 'my_key_present' True
my_key_present = 'key' in my_dict
# Ключ 'another_key' отсутствует в словаре, поэтому 'my_key_present' False
my_key_present = 'another_key' in my_dict
# not in
# Ключ 'key' существует, поэтому 'my_key_absent' False
my_key_absent = 'key' not in my_dict
# Ключ 'another_key' отсутствует в словаре, поэтому 'my_key_absent' True
my_key_absent = 'another_key' not in my_dict
Количество элементов в словаре
Количество элементов можно получить, используя функцию len().
my_dict = {'key': 'value'}
my_dict_length = len(my_dict) # 1
Детали реализации CPython
Словари реализованы при помощи динамических хеш-таблиц. По сравнению с двоичными деревьями, это, в большинстве случаев, даёт выигрыш при получшении значений (наиболее часто используемая операция); кроме этого упрошается реализация.
Для каждого ключа при помощи функции hash() вычисляется хеш-код. Код этот широко варьируется в зависимости от ключа и данных процесса (например, хеш для «Python» может быть
-539294296
, в то время как для «python» — отличается от первого одним битом — он будет 1142331976
). Хеш используется для определения места (во внутреннем массиве), где хранится значение. В случае если все используемые вами ключи будут иметь различные хеши, для получения значения по ключу будет затрачено постоянное время — O(1).На заметку
О сложности основных операций для данного типа можно узнать из статьи «Сложность операций со словарями».
Синонимы поиска: dict (словарь), словарь, словари, {}, dictionary, методы словарей
На заметку
Зарегистрированные пользователи могут публиковать свои Статьи.