У меня есть набор многомерных словарей, который выглядит следующим образом
dict1 = {'key21':{'key31': {'key41':val41}, 'key32':{'key42':val42}}}
Apriori, я не знаю размеров словаря. У меня есть огромная коллекция возможных ключей, и каждый словарь может содержать или не содержать ключи. Даже если они присутствуют, ключи могут быть не в том же порядке.
Если я создам список возможных значений ключа из коллекции, скажем
list1 = ['key21', 'key32', 'key42']
Как передать список как ключ, чтобы получить значение dict1['key21']['key32']['key42']
с обработкой исключений, аналогичной get команде
Вы можете запросить словарь итеративно, например:
dict1 = {'key21':{'key31': {'key41':41}, 'key32':{'key42':42}}}
list1 = ['key21', 'key32', 'key42']
#list1 = ['key21', 'key32', 'key42', 'bad-key'] # Test bad key
item = dict1
try:
for key in list1:
item = item[key]
except (KeyError, TypeError):
print None
else:
print item
KeyError
обрабатывает случай, когда ключ не существует.
TypeError
обрабатывает случай, когда элемент не является словарем, и, следовательно, дальнейший поиск не может быть выполнен. Это интересный случай, который легко пропустить (я сделал первый раз).
item = dict1[list1[0]][list1[1]][list1[2]]
внутри try
?