Python: преобразование списка в ключи dict для многомерного dict с обработкой исключений

1

У меня есть набор многомерных словарей, который выглядит следующим образом

dict1 = {'key21':{'key31': {'key41':val41}, 'key32':{'key42':val42}}}

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

Если я создам список возможных значений ключа из коллекции, скажем

list1 = ['key21', 'key32', 'key42']

Как передать список как ключ, чтобы получить значение dict1['key21']['key32']['key42'] с обработкой исключений, аналогичной get команде

  • 1
    Хорошим первым началом было бы написание некоторого кода ...
Теги:
key
dictionary
python-2.7

1 ответ

3
Лучший ответ

Вы можете запросить словарь итеративно, например:

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 обрабатывает случай, когда элемент не является словарем, и, следовательно, дальнейший поиск не может быть выполнен. Это интересный случай, который легко пропустить (я сделал первый раз).

  • 0
    Почему не просто item = dict1[list1[0]][list1[1]][list1[2]] внутри try ?
  • 0
    Согласно ОП; «Априори, я не знаю ни размеров словаря, ни значений ключей».
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню