Доступ к значениям словаря с использованием значений списка в качестве последующих ключей - PullRequest
0 голосов
/ 09 ноября 2018
keys = ['prop1', 'prop2', 'prop3']
dict = { prop1: { prop2: { prop3: True } } }

Как мне получить значение True из списка, используя список?

Не имеет успеха с

val = reduce((lambda a, b: dict[b]), keys)

Обновление:

keys и dict могут быть произвольно длинными, но всегда будут иметь соответствующие свойства / ключи.

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Использование цикла:

>>> a = ['prop1', 'prop2', 'prop3'] 
>>> d = {'prop1': {'prop2': {'prop3': True}}}
>>> result = d
>>> for k in a: 
...     result = result[k] 
...
>>> result
True

Использование функционального стиля:

>>> from functools import reduce
>>> reduce(dict.get, a, d)
True
0 голосов
/ 09 ноября 2018

EDIT: Как оп. Перефразировав свой вопрос, я сделал обновление:

На самом деле вам вообще не нужны ключи, чтобы получить "True". Вы можете использовать рекурсивную функцию, чтобы делать это красиво, не зная ключей.

d = { 'prop1': { 'prop2': { 'prop3': True } } }

def d_c(dc):
    if isinstance(list(dc.values())[0], dict):
        return d_c(list(dc.values())[0])
    return list(dc.values())[0]

Результат:

True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...