Назад к вопросам
Junior
69
questionbank
Что может быть ключом в словаре в Python?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Ключом в словаре Python может быть любой хешируемый объект.
Хешируемость объекта означает, что у него есть хеш-значение, которое не меняется в течение его жизненного цикла, и что он может быть сравнен с другими объектами на равенство.
Примеры хешируемых типов данных:
- Числа (
int,float,complex) - Строки (
str) - Кортежи (
tuple), при условии, что все элементы кортежа также хешируемые - Логические значения (
bool) None
Примеры нехешируемых типов данных:
- Списки (
list) - Словари (
dict) - Множества (
set)
# Допустимые ключи
valid_dict = {
1: "integer key",
"hello": "string key",
(1, 2): "tuple key", # Кортеж хешируем, т.к. его элементы (int) хешируемые
True: "boolean key",
None: "None key"
}
# Недопустимые ключи
# invalid_dict = {
# [1, 2]: "list key" # Список не хешируемый
# }
# invalid_dict = {
# {"a": 1}: "dict key" # Словарь не хешируемый
# }
# invalid_dict = {
# {1, 2}: "set key" # Множество не хешируемое
# }
# Пример кортежа, который нельзя использовать как ключ из-за нехешируемого элемента
# invalid_tuple_key_dict = {
# (1, [2, 3]): "invalid tuple" # Список внутри кортежа делает его не хешируемым
# }
Если объект является пользовательским классом, он может стать хешируемым, если определить методы __hash__ и __eq__. По умолчанию большинство пользовательских классов хешируемы, кроме тех, у которых явно определен метод __eq__, но не __hash__, или наследующих от класса с неизменяемым хешем, но имеющих изменяемые атрибуты.