Я пытаюсь найти все вхождения ключа в словаре. В настоящее время я понял, как создать генератор, который будет печатать только первый, но я не уверен, как вернуть их все в объект или каким-то образом использовать понимание генератора. Как мне вернуть все предполагаемые данные в пригодный для использования объект?
t = {'a': 1,
'b': {'f': 'asfdsf'},
'c': 3,
'd': [
{'a': 1,
'b': 2,
'c':
{'e': 1},
'd':
{'e': 55}}],
'g': 2}
def niah(haystack, needle, path=None):
if path is None:
path = []
if isinstance(haystack, dict):
if needle in haystack:
#print(path)
path.append(needle)
return(path)
for k, v in haystack.items():
result = niah(v, needle, path + [k])
if result is not None:
return result
elif isinstance(haystack, list):
for idx, v in enumerate(haystack):
result = niah(v, needle, path + [idx])
if result is not None:
return result
Вывод:
>>> niah(t, 'e'))
['d', 0, 'c', 'e']
Желаемый:
>>> niah(t, 'e'))
[['d', 0, 'c', 'e'], ['d', 0, 'd', 'e']] # or some kind object accessible by iteration, aka generator
Кажется, что путь уступки просто делает генераторы в бесконечном l oop.