2015-01-28 6 views
1

Я хочу использовать элементы в списке в качестве словарных ключей, чтобы найти значение во вложенных словарях.Использовать элементы списка как ключи для вложенного словаря

Например, учитывая следующий список:

keys = ['first', 'second', 'third'] 

Я хочу сделать:

result = dictionary[keys[0]][keys[1]][keys[2]] 

Какой бы эквивалент:

result = dictionary['first']['second']['third'] 

Но я не знайте, сколько предметов будет в списке keys (за исключением того, что он всегда будет иметь как минимум 1).

+0

Вы пробовали 'addict.Dict' - это, наверное, самый простой способ. В противном случае, конечно, вы можете выполнять итерацию с помощью '.get()' – user3467349

ответ

0

Простой для цикла будет работать:

result = dictionary[keys[0]] # Access the first level (which is always there) 
for k in keys[1:]:   # Step down through any remaining levels 
    result = result[k] 

Демо:

>>> dictionary = {'first': {'second': {'third': 123}}} 
>>> keys = ['first', 'second', 'third'] 
>>> result = dictionary[keys[0]] 
>>> for k in keys[1:]: 
...  result = result[k] 
... 
>>> result 
123 
>>> 
+0

. Вы должны попробовать, кроме или использовать get и break on None. – user3467349

+1

Почему? «keys» должен быть списком действительных ключей. Если он содержит тот, который не существует, я бы ожидал, что «KeyError» будет поднят. Подавление этой ошибки приведет только к проблемам, возникающим по линии. – iCodez

1

Итеративно идти в subdictionaries.

result = dictionary 
for key in keys: 
    result = result[key] 
print(result) 
Смежные вопросы