> Какие есть ограничения на ключи в dict в Python? (Python)
Уровень: senior · Роль: backend · Категория: Технические вопросы
Компании: Домклик
Стек: Python
> Пример ответа
В Python ключи словаря должны быть неизменяемыми (hashable) объектами. Это означает, что у объекта должен быть метод __hash__(), возвращающий целое число, которое не меняется в течение жизни объекта, и метод __eq__() для сравнения. Если два объекта равны (==), их хеши должны совпадать.
Основные ограничения:
- Нельзя использовать изменяемые типы: списки, множества, словари (они не хешируемы). Попытка приведёт к
TypeError: unhashable type. - Кортежи можно, но с оговоркой: кортеж, содержащий изменяемые элементы (например, список), тоже не может быть ключом.
- Числа: целые числа, float, complex - допустимы. При этом
1и1.0считаются разными ключами, но1иTrue- нет (так какTrueравен 1 по__eq__). - Строки и байты: работают как ключи.
- Пользовательские объекты: по умолчанию хешируемы (на основе
id()), если не переопределён__eq__без__hash__. Если переопределён__eq__, нужно явно задать__hash__, иначе объект станет нехешируемым. - None: может быть ключом.
- Ключи должны быть уникальными: при добавлении дублирующегося ключа старое значение перезаписывается.
Примеры:
PYTHONd = {}d[42] = "int" # OKd["key"] = "str" # OKd[(1, 2)] = "tuple" # OKd[[1, 2]] = "list" # TypeErrord[{"a": 1}] = "dict" # TypeErrord[True] = "bool" # OK, но True == 1
> Похожие задачи по backend
Как вывести в одном датафрейме результаты по студентам с баллами по математике и биологии ниже 80
Как посчитать возраст в годах между текущей датой и датой рождения в Python
Как выбрать строку с определённым индексом в DataFrame
Что такое range в Python и как он используется в качестве аргумента?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью