Найти путь к элементу во вложенном словаре
Имеется вложенный словарь следующего вида:
{'a': {'s': {...}, 't': {...}},
'b': {'q': {...}, 'y': {...}, 'k': {...}}, ['1', '2', '3'...],
'c': {'i': {{'p': [...], 'l': ['qw', 'rt']}}, 'm': {...}}}
Необходимо найти путь к определенному элементу.
Например, если требуется найти s = 'rt',
то должно получиться ['c', 'i', 'l'].
Пыталась сделать такую реализацию, но пока ничего не работает:
def find_elements(my_dict, st):
for k, v in my_dict.items():
if isinstance(v, dict):
for k2, v2 in v.items():
if isinstance(v2, list) and st in v2:
yield k
yield k2
else:
find_elements(v2, st)
elif isinstance(v, list):
for l in v:
if l == st:
yield k
elif isinstance(v, str):
if v == st:
yield k
s = 'какая-то строка'
qw = []
for i in find_elements(my_dict, s):
qw.append(i)
Ответы (1 шт):
Автор решения: Павел
→ Ссылка
Можно сделать рекурсивно, только нужно дополнительно сохранять уже пройденный путь, чтобы не потеряться.
def find_elements(my_dict, st, path=[]):
for k, v in my_dict.items():
if v == st or st in v:
return path + [k]
elif isinstance(v, dict):
if el := find_elements(v, st, path + [k]):
return el
my_dict = {'a': {'s': {}, 't': {}}, 'b': {'q': {}, 'y': {}, 'k': {'1'}},
'c': {'i': {'p': [], 'l': 'rt'}, 'm': {}}}
s = 'rt'
qw = find_elements(my_dict, s)
print(qw)
Вывод:
['c', 'i', 'l']