def paths(some_dict, path=()):
for key, value in getattr(some_dict, 'items', lambda: ())():
yield path + (key,)
yield from paths(value, path + (key,))
d = {'a': {'b': {'c': {},'d': {'e': {}}}}}
print(*paths(d), sep='\n')
ZGVmIHBhdGhzKHNvbWVfZGljdCwgcGF0aD0oKSk6CiAgICBmb3Iga2V5LCB2YWx1ZSBpbiBnZXRhdHRyKHNvbWVfZGljdCwgJ2l0ZW1zJywgbGFtYmRhOiAoKSkoKToKICAgICAgICB5aWVsZCBwYXRoICsgKGtleSwpCiAgICAgICAgeWllbGQgZnJvbSBwYXRocyh2YWx1ZSwgcGF0aCArIChrZXksKSkKCmQgPSB7J2EnOiB7J2InOiB7J2MnOiB7fSwnZCc6IHsnZSc6IHt9fX19fQpwcmludCgqcGF0aHMoZCksIHNlcD0nXG4nKQo=
('a',)
('a', 'b')
('a', 'b', 'c')
('a', 'b', 'd')
('a', 'b', 'd', 'e')