Как получить доступ к элементам словаря, используя элементы из кортежа? - PullRequest
0 голосов
/ 06 июля 2019

Если у меня есть кортеж кортежей:

cyc = (('a-b', 'b-a'), ('a-c', 'c-a'), ('b-c', 'c-b'))

и словарь словарей:

data = {'a-b': {'x': 1, 'y': 2},
        'b-a': {'x': 3, 'y': 4},
        'a-c': {'x': 5, 'y': 6},
        'c-a': {'x': 7, 'y': 8},
        'b-c': {'x': 9, 'y': 10},
        'c-b': {'x': 11, 'y': 12}}

Как получить доступ к элементам словаря, используя элементы кортежа?

Например, если я просто хочу напечатать элемент:

print(data[cyc[1[0['x']]]])

Я учил, что это вернет 5.

Вместо этого это дает мне сообщение об ошибке:

'' TypeError: объект 'int' не может быть подписан ''

Ответы [ 3 ]

3 голосов
/ 06 июля 2019

Когда вы получаете доступ к вложенным элементам, вы не вкладываете индексы, вы добавляете их.

cyc[1] == ('a-c', 'c-a')

Это значит

cyc[1][0] == 'a-c'

Чтобы использовать это в качестве индекса в словаре, вы пишете

data[cyc[1][0]]

и затем, чтобы получить индекс x из этого вложенного словаря, вы добавляете ['x']:

data[cyc[1][0]]['x']

Когда вы пишете что-то вроде 0['x'], это означает индексировать значение 0, что не имеет никакого смысла.

2 голосов
/ 06 июля 2019

Вот последовательность подвыражений, которые вы надеялись пройти:

>>> cyc[1]
('a-c', 'c-a')
>>> cyc[1][0]
'a-c'
>>> data[cyc[1][0]]
{'x': 5, 'y': 5}
>>> data[cyc[1][0]]['x']
5
2 голосов
/ 06 июля 2019

Внутри [] вы кладете ключ, к которому осуществляется доступ.Если вам нужен элемент из этого возвращаемого значения, вы ставите еще один [] после , который:

print(data[cyc[1][0]]['x'])

Извлекает из словаря data значениепо ключу cyc[1][0], который является элементом 0 внутри элемента 1 внутри цикл.Из этого значения, которое является другим словарем, возьмите значение в ключе 'x'

...