#python #dictionary #oop #&raph #python-class
#python #словарь #ооп #График #python-class
Вопрос:
Здесь новичок, и мне было интересно, возможно ли это, или это вообще правильный подход к проблеме.
Общая идея состоит в том, чтобы иметь график из разных узлов, где каждый узел мог бы быть (как в следующем случае) человеком или, возможно, местоположением, или чем-то еще.
Я подумал, что лучшим способом представления узлов графа и отношений было бы иметь словарь наборов, где ключи словаря являются узлами, а его значения представляют дуги направлений (key1 -&&t; key1value1, key1 -&&t; key1value2).
Итак, у меня есть простой класс под названием Person:
class Person:
def __init__(self, name):
self.name = name
def __eq__(self, other):
return (self.name, ) == (other.name, )
def __hash__(self):
return hash((self.name,))
def __repr__(self):
return self.name
Затем у меня есть словарь, в котором и ключ, и значения являются объектами класса:
classdict = {}
classdict[Person("James")] = {Person("Maria")}
classdict[Person("James")].add(Person("Bonita"))
Хорошо, пока все хорошо. Когда я выполняю print(classdict)
, ответ:
{James: {Maria, Bonita}}
И быстрая проверка типа показывает, что все они являются объектами класса:
for k, v in classdict.items():
print(type(k))
print(type(list(v)[0]))
print(type(list(v)[1]))
С принтами:
<class '__main__.Person'&&t;
<class '__main__.Person'&&t;
<class '__main__.Person'&&t;
Но теперь я не понимаю, как мне с этим работать?
Например, я хотел бы получить доступ к значениям словаря по ключу, где указан атрибут name James
. Как бы мне это сделать? Глупый я, я попробовал, print(classdict["James"])
что, очевидно, не сработало, и выдает мне KeyError
.
Комментарии:
1. Чтобы получить доступ к значениям словаря, где имя Джеймс, вам придется искать хэшированный объект Person(«Джеймс»), поэтому print(classdict[Person(«Джеймс»)]) выдаст вам значения {Bonita, Maria}
2. @bp7070 Ладно, это была до смешного простая вещь, которую я упустил из виду. И да, это работает! Спасибо!
3. Я не тестирую, но думаю, что если вы определяете
__has__
как:return hash(self.name)
, тоclassdict["James"]
это сработает.