Словарь — изменяемый объект-отображение.
dict([obj, ][**kwargs])
obj -- Первым необязательным позиционным аргументом может являться отображение или итерирующийся объект (при этом каждый его элемент должен быть тоже итерирующемся и содержать ровно два объекта).

**kwargs -- Поддерживаются также необязательные именованные аргументы. При использовании вкупе с позиционными аргументами и совпадении ключей значениями из именованных пользуются приоритетом.

Словари являются отображениями.
Словари являются изменяемыми объектами.

Объявление


В коде словари могут быть объявлены при помощи фигурных скобок — {} .

    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, методы словарей
На заметку
Зарегистрированные пользователи могут добавлять Книги.