Так же, как пояснение, этот метод работает для структуры вложенного композита ie dict
/ list
, так как именно это вы показали в своем примере
def empty(d):
if isinstance(d, dict):
return all(empty(sub) for _, sub in d.items())
if isinstance(d, list):
return all(empty(sub) for sub in d)
return False
Это, конечно, короче, но это все еще рекурсивно. Прохождение через произвольно вложенную структуру является изначально рекурсивной проблемой.
Кроме того, вы можете заметить, что эта функция устраняет любую зависимость от неявной bool
сущности любых объектов. Причина в том, что хотя пустые list
[]
и пустые dict {}
оцениваются как ложные, так и другие объекты, подобные нулю, например, 0
, 0.0
, ''
.