Для того, чтобы узнать максимальный уровень вложенности произвольного словаря, можно использовать простую рекурсивную функцию:
def depth(source_dict: dict) -> int:
if not (isinstance(source_dict, dict)): # проверка типа, т.к. среди вложенных значений не обязательно будут dict
return 0 # если это не словарь, то возвращаем 0 (в логич. выражениях это даст False)
return 1 + (max(map(depth, d.values())) if d else 0) # проверяем рекурсивно
То есть мы применяем рекурсивно функцию depth к каждому значению в словаре и берём максимальное значение из списка, который составляется из не нулевых элементов, то есть элементов, имеющих вложенность.
Условие if d else 0
позволяет избежать ValueError в случае, когда d будет являться пустым словарём max({ })
, т.к. при этом получим ValueError: max() arg is an empty sequence
.