Как получить значение из определенного ключа

#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() метода. Это должно работать лучше