Задать вопрос
@firstmixon

Есть ли способ получить данные из словаря по ХЕШУ ключа?

Имеем питон 3.8, в одной из задач требовалось организовать хранение данных в словаре для последующей конвертации в json.

В роли ключа используется экземпляр класса "test", а значение "строка", условный пример.

Вопрос существует ли способ достучатся до "ключа" в словаре, если мы знаем(ранее сохранили) его значение, я понимаю что это не лучший вариант, но все же интересно?

class test:
    def __init__(self):
        self.key = ''
        self.p1  = 0
        self.p2  = 0
        self.p3  = 0
        self.my_hash = None


    def __hash__(self):
        self.my_hash = hash(self.key)
        return hash(self.my_hash)

    def __eq__(self, other):
        return other and self.key == other.key


tmp_dict = {}
tmp = test()
tmp.key = "test_1"

tmp_hash = tmp.__hash__()
print(tmp_hash)

tmp_dict[tmp] = "value by key 'test_1'"

print(tmp_dict[tmp])
print(tmp_dict[tmp_hash]) <-- ?
  • Вопрос задан
  • 1939 просмотров
Подписаться 2 Простой 5 комментариев
Пригласить эксперта
Ответы на вопрос 1
@merdovash
Словарь в python использует, помимо прочего, и функцию __eq__ для сравнения ключей. Поэтому
  1. воспользуемся свойством, что hash(int) == int для маленьких int
  2. изменим функцию сравнения на такую:
    def __eq__(self, other):
            if isinstance(other, int):
                return hash(self) == other
            return other and self.key == other.key



И тогда выводом программы будет
-2213746293832839369
value by key 'test_1'
value by key 'test_1'

Но будьте осторожны с такой функцией сравнения можно нарваться на коллизии в самых неожиданных местах
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы