Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 30, 2019 11:26:00

stanislav.sh7
Зарегистрирован: 2019-04-30
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

поиск ключа в словаре переменной глубины.

Добрый день.
Есть словарь глубина вложенности элементов не известна может быть просто словарь в словаре, а может словарь в словаре и так 10 раз. Возникает вопрос как в таком случае грамотно организовать поиск ключа который может встречаться в разных ветках и на разных уровнях словаря.

Офлайн

#2 Апрель 30, 2019 11:41:34

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

поиск ключа в словаре переменной глубины.

stanislav.sh7
Возникает вопрос как в таком случае грамотно организовать поиск ключа который может встречаться в разных ветках и на разных уровнях словаря.

Ну дык рекурсия как раз и решает подобные задачи.



Офлайн

#3 Апрель 30, 2019 12:00:00

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9958
Репутация: +  856  -
Профиль   Отправить e-mail  

поиск ключа в словаре переменной глубины.

  
>>> def f(dct, key):
...     if key in dct:
...         return (key, dct[key])
...     for k in dct:
...         if isinstance(dct[k], dict):
...             res = f(dct[k], key)
...             if res is not None:
...                 return res
...     return None
... 
>>> f({'a': 'a1', 'b': 'b1'}, 'a')
('a', 'a1')
>>> f({'a': 'a1', 'b': 'b1'}, 'b')
('b', 'b1')
>>> f({'a': {'c': 'c2', 'd': 'd2'}, 'b': 'b1'}, 'c')
('c', 'c2')
>>> f({'a': {'c': 'c2', 'd': 'd2'}, 'b': 'b1'}, 'd')
('d', 'd2')
>>> f({'a': {'c': {'e': 'e3', 'f': 'f3'}, 'd': 'd2'}, 'b': 'b1'}, 'e')
('e', 'e3')
>>> f({'a': {'c': 'c2', 'd': 'd2'}, 'b': 'b1', 'd': 'd1'}, 'd')
('d', 'd1')
>>> f({'a': 1}, 'a')
('a', 1)
>>> f({'a': 1}, 'x')
>>> 



Отредактировано py.user.next (Апрель 30, 2019 12:17:00)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version