【发布时间】:2017-01-06 20:50:07
【问题描述】:
此函数旨在获取一个通用字典(可能递归地包含其他字典和列表)并将其所有内容放在一个线性列表中。
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 的方式来编写它? (特别是我可以写一个列表理解吗?)
【问题讨论】:
-
更一般地,你可以检查一个元素是否是可迭代的(看看它的属性中是否有
__iter__方法)然后迭代它的元素。除非你认为这种方式太大。问候。 -
或者使用
collections.abc中的抽象基类 -
您应该使用
isinstance而不是type(a) == type({})。至少,type(a) == dict。但是使用isinstance(a, dict) -
另外,
make_a_list(a.keys()) 可能只是make_a_list(a)。但是,这可能不是必需的,因为键不能是dicts 或lists,因为两者都是不可散列的。 -
如果这是您认为可以改进的工作代码,请参阅Code Review。如果没有,请查看How to Ask 并澄清问题。
标签: python recursion list-comprehension