Pythonic способ использовать get () по умолчанию во вложенном словаре?

Мы знаем, как использовать get с dict в python:

a={'k':'thevalue}
a.get('k', 'There is no such key in the dict')
a.get('m', 'There is no such key in the dict')

первый get возвращает соответствующее значение, а второй — значение по умолчанию.

Как бы вы поступили в следующей ситуации в одном лайнере:

a={'k':{'first':'uno','second':'dos'}}
# this is peseudocode:
a.get('k.first', 'There is no such key in the dict')
a.get('k["first"]', 'There is no such key in the dict')

это означает, что если k существует в словаре, я хочу сначала получить содержимое значения ключа, то есть 'uno'.


person JFerro    schedule 16.06.2021    source источник
comment
a.get('k', {}).get('first', 'no'). Но это действительно зависит от того, какие ключи вы ожидаете и позволяете отсутствовать, а какие нет. В какой-то момент try: a['k']['first'] except KeyError: становится легче и осмысленнее.   -  person deceze♦    schedule 16.06.2021
comment
Как насчет цепочки? a.get('k').get('x', 'whatever')   -  person Karolos K.    schedule 16.06.2021
comment
Отвечает ли это на ваш вопрос? Безопасный метод получения значения вложенного словаря   -  person MisterMiyagi    schedule 16.06.2021
comment
@Каролос AttributeError: NoneType has no .get  -  person deceze♦    schedule 16.06.2021
comment
Яп я не добавлял по умолчанию для первого уровня. Вы можете сделать, как вы сказали в своем комментарии. Это был просто образец цепочки   -  person Karolos K.    schedule 16.06.2021