Как отмечается в комментариях, вы можете использовать any()
здесь:
Возвращать True, если какой-либо элемент итерируемого равен true. Если итерация пуста, вернуть False
. Код, приведенный ниже, выполняет итерацию значений из словаря, если мы находим dict
return True
. Если мы найдем tuple
, проверьте, являются ли какие-либо подэлементы tuple
или dict
, а затем верните True
, если мы найдем какие-либо элементы. В противном случае верните False
, если мы дойдем до конца функции и не найдены вложенные элементы. Это предполагает, что вы не обрабатываете list
или любой другой тип коллекции, что не является проблемой и может быть легко добавлено в приведенный ниже код.
def hasNestedElt(dic):
for v in dic.values():
if isinstance(v, dict):
return True
elif isinstance(v, tuple):
if any(isinstance(x, (dict, tuple)) for x in v):
return True
return False
Контрольные примеры:
>>> hasNestedElt({'a': 1, 'b': 2}))
False
>>> hasNestedElt({'a': 1, 'b': {'c': 3} })
True
>>> hasNestedElt({'a': 1, 'b': ('c', 3) })
False
>>> hasNestedElt({'a': 1, 'b': ('c', 3, 'x') })
False
>>> hasNestedElt({'a': 1, 'b': ('c', (3, 'x')) })
True
>>> hasNestedElt({'a': 1, 'b': ('c', (3, {'d': 4})) })
True