Вы можете использовать рекурсивный подход для поиска во вложенном словарном представлении, пока не найдете 'key1', а затем вернете поиск [key1] [key2] [key3]. Это предполагает, что ключ1 не дублируется в структуре данных.
In [9]: def lookup(key, nested_dict):
...: for k, v in nested_dict.items():
...: if k == key:
...: return v
...: if isinstance(v, dict):
...: val = lookup(key, v)
...: if val:
...: return val
...: return None
In [10]: a = {'b' :{'c':{'d':1}}, 'f':2}
In [11]: lookup('d', a)
Out[11]: 1
In [12]: lookup('b', a)
Out[12]: {'c': {'d': 1}}
In [13]: lookup('c', a)
Out[13]: {'d': 1}