Ответ
В Python ключом словаря может быть любой хешируемый (immutable) объект. Это означает, что объект должен быть неизменяемым и иметь метод __hash__()
, который возвращает постоянное значение на протяжении его жизни. Хешируемость необходима для эффективной работы словарей, так как они используют хеш-таблицы для быстрого поиска ключей.
Допустимые хешируемые типы данных:
- Числа:
int
,float
,complex
- Строки:
str
- Кортежи:
tuple
, но только если все их элементы также хешируемы. - Замороженные множества:
frozenset
- Булевы значения:
bool
- NoneType:
None
Недопустимые (нехешируемые) типы данных:
- Списки:
list
(изменяемые) - Словари:
dict
(изменяемые) - Множества:
set
(изменяемые)
Пример:
# Допустимые ключи
valid_dict = {
42: "Ответ на всё",
"key": "value",
(1, 2): "tuple as key",
frozenset({1, 2}): "frozenset as key",
None: "None as key"
}
print(valid_dict)
# Ошибка: TypeError: unhashable type: 'list'
try:
invalid_dict = { [1, 2]: "list as key" }
except TypeError as e:
print(f"Ошибка: {e}")
Важно помнить, что ключи в словаре должны быть уникальными. При попытке добавить ключ, который уже существует, его значение будет перезаписано.