#python #python-3.x
#python #python-3.x
Вопрос:
Я определил такой класс, как этот:
class NodeData :
key = 0
neighbors = {}
location = ()
def __init__(self, k, l):
self.key = k
self.location = l
self.neighbors = {k: {}}
def __str__(self) :
return "key = %d" % self.key ", pos = " '{0}'.format(self.location)
", neighbors = " '{0}'.format(NodeData.neighbors.get(self.key))
и теперь мне нужно соединить ребра между этими узлами с помощью веса.
Итак, я создал словарь в словаре, подобном этому:
node = NodeData(1, (5, 0, 0))
node.neighbors = {0: 1.2}
Итак, у соседей теперь есть это:
{1: {0: 1.2}}
Затем я создал еще один узел:
node2 = NodeData(2, (6, 0, 0))
Теперь я хочу подключиться node2
node
, но у меня есть проблемы с тем, как узнать, является ли node2.key
он уже соседом node
Эта функция получает соседнего узла: NodeData.neighbors.get(node.key)
но я не нашел способа сравнить его с node2.key
возвращает node2 key = 2, pos = (6, 0, 0), neighbors = None
, поэтому он не совпадает NodeData.neighbors.get(node.key)
Уже пробовал NodeData.neighbors.get(node.key).get(node2.key)
, но он возвращается:
'NoneType' object has no attribute 'get'
Beacuse node2
не является соседом node
Любой совет?
Комментарии:
1. Можете ли вы уточнить, какой тип структуры данных вы пытаетесь реализовать? Это что, какое-то дерево?
2. Как вы перешли от
node.neighbors = {0: 1.2}
«соседей сейчас» к «соседям сейчас{1: {0: 1.2}}
» ?3. Я пытаюсь реализовать график.
4. Знаете ли вы о том факте, который
neighbors = {}
определяет атрибут класса и атрибутself.neighbors = {k: {}}
экземпляра? Это не одно и то же.5. @zvone Сначала я создал новый Nodedata с
key = 1
помощью, а затем ввел значения в словарь соседей{0: 1.2}
Ответ №1:
Используйте []
синтаксис для доступа к вложенным значениям.
Например
dic = { "key" : {"key 2" : 20} }
dic["key"]["key 2"]
Который вернет
20
Комментарии:
1. На самом деле я пробовал это. Но это не работает, потому что — Когда я делаю это с помощью IF like that:
if dic.get("key").get("key 2")
тогда я получаю нулевую ошибку, потомуkey 2
что не существует2. Привет, @John Я отредактировал свой ответ, чтобы использовать
[]
синтаксис вместо.get()
метода. Это должно работать лучше