Как получить доступ к содержимому вложенного словаря в python - PullRequest
0 голосов
/ 23 марта 2020

Для приведенного выше словаря я пытаюсь выполнить итерацию для доступа к значениям в моем вложенном словаре. Я хочу получить доступ к 'Pos': (8.426625936328438, 8.734385941525895) ключ, пара значений из вложенного словаря, но я не могу получить доступ к вложенным значениям словаря.

(
    0,
    {
        'id': 0,
        'name': 0,
        'data': {
            'Mha': 'PHMA1',
            'Rack': '101',
            'RackNbr': 1,
            'HorCoor': '1',
            'VerCoor': 10,
            'Pos': (8.426625936328438, 9.387017518725838),
            'Type': 'pick'
        }
    }
)

(
    1,
    {
        'id': 1,
        'name': 1,
        'data': {
            'Mha': 'PHMA1',
            'Rack': '101',
            'RackNbr': 1,
            'HorCoor': '6',
            'VerCoor': 10,
            'Pos': (8.426625936328438, 8.734385941525895),
            'Type': 'pick'
        }
    }
)

Вот код, который я пробовал:

for id in NodeDict:
    print("Node Id", id)
        for key in NodeDict[id]:
            print(key + ':', NodeDict[id][key])

Вывод того, что я пробовал:

Node Id 0
id: 0
name: 0
data: {'Mha': 'PHMA1', 'Rack': '101', 'RackNbr': 1, 'HorCoor': '1', 'VerCoor': 10, 'Pos': (9.680053042990044, 10.65663364187665), 'Type': 'pick'}

Node Id 1
id: 1
name: 1
data: {'Mha': 'PHMA1', 'Rack': '101', 'RackNbr': 1, 'HorCoor': '6', 'VerCoor': 10, 'Pos': (9.680053042990044, 9.88930691075074), 'Type': 'pick'}
}]

Но я хочу получить доступ только к значению Pos. Может ли кто-нибудь здесь помочь?

Ответы [ 3 ]

0 голосов
/ 23 марта 2020

Взгляните на Nestes-lookup . Эта библиотека позволит вам быстро найти все ключи в dict.

0 голосов
/ 23 марта 2020

Может быть, вы можете получить к нему доступ в конце концов. Я думаю, что ваша проблема заключается в следующем:

Вы получаете KeyError, потому что вы написали что-то, используя просто id , например:

print(NodeDict[id]['data']['Pos'])

Запись NodeDict[0]['data']['Pos'] или NodeDict[1]['data']['Pos'] вместо этого и должно работать. Это также должно работать в al oop:

for id in NodeDict:
    NodeDict[id]['data']['Pos']

Ошибка вызвана тем, что id () является функцией, и поэтому id не выделяется как неопределенное при использовании в качестве ключа в квадратных скобках.

0 голосов
/ 23 марта 2020

Попробуйте переписать ваши данные, например:

d = {}      
d[0] = {'id': 0, 'name': 0, 'data': {'Mha': 'PHMA1', 'Rack': '101', 'RackNbr': 1, 'HorCoor': '1', 'VerCoor': 10, 'Pos': (8.426625936328438, 9.387017518725838), 'Type': 'pick'}} 
d[1] = {'id': 1, 'name': 1, 'data': {'Mha': 'PHMA1', 'Rack': '101', 'RackNbr': 1, 'HorCoor': '6', 'VerCoor': 10, 'Pos': (8.426625936328438, 8.734385941525895), 'Type': 'pick'}}  

затем

> d[0]['data']['Pos']                                                                                  
> (8.426625936328438, 9.387017518725838)

> d[1]['data']['Pos']                                                                                  
> (8.426625936328438, 8.734385941525895)
...