此函数用于获取通用字典(可能递归地包含其他字典和列表),并将其所有内容放在单个线性列表中.
def make_a_list(a):
print type(a)
if (type(a) == type({})):
return make_a_list(a.keys()) + make_a_list(a.values())
elif (type(a) == type([])):
if len(a) > 1:
return make_a_list(a[0]) + make_a_list(a[1:])
return a
else:
return [a]
它完成了它的工作,但我想知道:
a)我忘记了任何重要的数据类型吗? (例如,我忘了套)
b)写一个更加pythonic的方式是什么? (尤其是我可以写一个列表理解吗?)
最佳答案 您可以使用yield避免函数中的列表创建/连接.
def make_a_list(a):
if isinstance(a, dict):
yield from make_a_list(a.keys())
yield from make_a_list(a.values())
elif isinstance(a, (list, tuple, set)):
for x in a:
yield from make_a_list(x)
else:
yield a
这是一个生成器,所以如果你真的需要一个列表,你可以这样做:
def make_a_real_list(a):
return list(make_a_list(a))
另请注意isinstance比直接比较类型更好.