Задать вопрос
@1Danshin1

Как работает магический метод __hаsh__ в питоне при создании словаря?

class User:
   def __init__(self, name, email):
      self.name = name
      self.email = email
   def __hash__(self):
      return hash(self.email)
   def __eq__(self, obj):
      return self.email == obj.email

jane = User('Jane Doe', 'jdoe@example.com')
joe = User('Joe Doe', 'jdoe@example.com')
print(jane == joe)
user_email_map = {user: user.name for user in [jane, joe]}
print(user_email_map)

{<__main__.User object at 0x107415908>: 'Joe Doe'}
Почему при создании словаря в вывод попало только одно значение ключа, если через метод hаsh определен один ключ, но значений ключа в '''user_email_map = {user: user.name for user in [jane, joe]}''' остаётся два ?
  • Вопрос задан
  • 410 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@PavelMos
Имхо навряд ли это с ним связано потому что при списке всё ок. Со словарём может быть проблема если последующий ключ равен предыдущему, тогда он его перезаписывает.
[(user.email,user.name) for user in (jane, joe)]
Out[26]: [('jdoe@example.com', 'Jane Doe'), ('jdoe@example.com', 'Joe Doe')]
[(user,user.name) for user in (jane, joe)]
Out[33]: 
[(<__main__.User at 0x1614587a390>, 'Jane Doe'),
 (<__main__.User at 0x1614587a1d0>, 'Joe Doe')]

UPD
но
{joe:joe.name, jane:jane.name}
Out[46]: {<__main__.User at 0x1614587a1d0>: 'Jane Doe'}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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