Ключи словаря - это произвольные, неизменяемые (хешируемые) значения. Значения, которые не являются хешируемыми не могут использоваться в качестве ключей. Это такие значения, которые содержат
list
списки, сами словари
dict
или другие
изменяемые типы, которые сравниваются по значению, а не по идентификатору объекта.
Числовые типы, используемые для ключей, подчиняются обычным правилам
числового сравнения: если два числа при сравнении считаются равными, например
1 == 1.0
, то они могут использоваться взаимозаменяемо для индексирования одной и той же записи словаря. Поскольку процессоры хранят числа с плавающей запятой в качестве приближений, то неразумно использовать их в качестве ключей словаря.
{'jack': 4098, 'sjoerd': 4127}
# или
{4098: 'jack', 4127: 'sjoerd'}
Словари поддерживают следующие операции:
- Словари поддерживают различные методы, которые описаны в разделе "Операции со словарями".
- Методы словаря
dict.keys()
, dict.values()
и dict.items()
возвращают списки-представления. - Словари считаются равными тогда и только тогда, когда они имеют одинаковые пары
(key, value)
. Равенство не зависит от порядка следования ключей. - Такие сравнения как
'<'
, '<='
, '>='
, '>'
поднимают исключение TypeError
.
Свойства типа данных словарь dict
:
- Словари гарантированно сохраняют порядок вставки элементов (С версии Python-3.7).
- Обновление ключа не влияет на порядок расположения элементов словаря.
- Ключи, добавленные после удаления, вставляются в конец словаря.
- Словари и словарные представления стали обратимы. Другими словами их можно развернуть с сохранением порядка вставки элементов. Не путать с обратной сортировкой. (С версии Python-3.8)
- Cписки-представления обеспечивают динамическое представление записей словаря. То есть при изменении словаря они отражают эти изменения.
Дополнительно смотрите материалы:
Примеры операций со словарями:
>>> d = {"one": 1, "two": 2, "three": 3, "four": 4}
>>> d
# {'one': 1, 'two': 2, 'three': 3, 'four': 4}
# гарантированное сохранение порядка вставки
>>> list(d)
# ['one', 'two', 'three', 'four']
>>> list(d.values())
# [1, 2, 3, 4]
# обновление ключа не влияет на порядок
>>> d["one"] = 42
>>> d
# {'one': 42, 'two': 2, 'three': 3, 'four': 4}
# После удаления, ключ вставляются в конец словаря
>>> del d["two"]
>>> d["two"] = None
>>> d
# {'one': 42, 'three': 3, 'four': 4, 'two': None}
Словари и словарные представления стали обратимы:
>>> d = {"one": 1, "two": 2, "three": 3, "four": 4}
>>> d
# {'one': 1, 'two': 2, 'three': 3, 'four': 4}
>>> list(reversed(d))
# ['four', 'three', 'two', 'one']
>>> list(reversed(d.values()))
# [4, 3, 2, 1]
>>> list(reversed(d.items()))
# [('four', 4), ('three', 3), ('two', 2), ('one', 1)]