Sobes.tech
Back to questions
Junior — Middle
59

Какие требования предъявляются к объекту для его использования в качестве ключа в словаре?

Answer from AI

sobes.tech AI

Для использования объекта в качестве ключа в словаре (dict) в Python он должен быть:

  1. Хешируемым (hashable): объект должен иметь метод __hash__(), который возвращает неизменяемое значение.
  2. Неизменяемым: состояние объекта не должно изменяться во время его использования в качестве ключа, иначе хеш может измениться, что нарушит работу словаря.
  3. Сравнимым: объект должен иметь корректно реализованный метод __eq__(), чтобы словарь мог сравнивать ключи.

Примеры подходящих ключей: числа, строки, кортежи из неизменяемых элементов.

Пример:

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def __hash__(self):
        return hash((self.x, self.y))
    def __eq__(self, other):
        return isinstance(other, Point) and self.x == other.x and self.y == other.y

p = Point(1, 2)
d = {p: "точка"}
print(d[p])  # Выведет: точка

Если объект изменяемый или не реализует __hash__, использовать его в качестве ключа нельзя.