Вы можете использовать рекурсивный генератор с вашей идеей try
/ except
:
a = {"foo":1}
b = [{"foo":2}]
c = [{"foo":3}, {"foo":4}]
L = [a, b, c]
def get_values(x):
for i in x:
try:
yield i['foo']
except TypeError:
yield from get_values(i)
res = list(get_values(L)) # [1, 2, 3, 4]
В качестве альтернативы, используйте `isinstance:
def get_values(x):
for i in x:
if isinstance(i, dict):
yield i['foo']
else:
yield from get_values(i)
Обратите внимание, что вы должны Никогда не называйте переменные после встроенных модулей, например, используйте list_
или L
вместо list
.