#python #python-3.x #dictionary #nested
Вопрос:
Я не уверен, что у меня просто мозговой блок здесь или это действительно должно быть проблемой, но у меня возникают проблемы с пониманием того, как проверить глубину вложенных словарей, если ключи неизвестны.
Вот пример того, что я пытаюсь сделать (самым простым/эффективным способом):
Оптимально, чтобы у меня был какой-то способ определить максимальную глубину этого диктанта, не зная ключей и значений —
nested_dict = { 'nest1': { 'nest2': { 'nest3': 'val' }, 'unknown_key', 'val', 'unknown_key': 'val' } }
Пожалуйста, дайте мне знать, если это имеет смысл.
Комментарии:
1. Вы можете просмотреть каждое
.values()
из значений диктанта и проверить, является ли какое-либо из этих значений диктом. Затем рекурсивно проверьте значения этого диктанта.2. В зависимости от контекста для хранения данных может оказаться более полезной другая структура данных (например, дерево).
3. Я переформатировал ваши данные, чтобы выделить синтаксическую ошибку для первого «неизвестного ключа» и дубликата ключа.
4. … и если вам не нужно рекурсивное решение, используйте очередь, чтобы выяснить, какие ветви вам нужно изучить. Т. е. это алгоритм поиска на вдохе или на глубине, который просто считается.
5. @9769953 Как выглядит древовидная структура данных в Python?
Ответ №1:
Проверьте, является ли это диктом, если да, повторите значения и рекурсивно вызовите функцию, чтобы получить максимальное значение.
PS : В Dict была синтаксическая ошибка, исправлена
def max_depth(d): if isinstance(d, dict): return 1 max((max_depth(value) for value in d.values()), default=0) return 0 nested_dict = {'nest1': {'nest2': {'nest3': 'val'}, 'unknown_key': 'val', 'unknown_key': 'val'}} print(max_depth(nested_dict))
Выход 3
Комментарии:
1. Большое спасибо! Это делает это. Программист-самоучка здесь, так что я не слишком знаком с рекурсией, но это отлично работает!
2. рад узнать, что это работает, поиграйте с кодом, чтобы понять, как это работает, если это помогло, вы можете пометить это решение как принятое @hdevs