我正在尝试循环一个具有未知数量的嵌套层的dict。
我想编写一个循环遍历每一层的函数,直到最后。
我认为这里需要一个递归函数,但我想就如何做一些建议。
这是代码逻辑:
for levelone in file:
for leveltwo in levelone:
for levelthree in leveltwo:
for levelfour in levelthree:
....
你们有什么想法?
答案 0 :(得分:1)
我认为你想要做的是:
def loop_through(iterable):
try:
for item in iterable:
# do your thing
loop_through(item)
except TypeError:
# not iterable, reached the bottom
一旦您使用了相应的功能,您就可以loop_through(file)
。根据你想要做的事情,你可能需要return
来自递归调用的东西并处理它,或创建一个容器来放置结果:
def loop_through(iterable, container=None):
if container is None:
container = []
try:
for item in iterable:
# do your thing
loop_through(item, container)
except TypeError:
# not iterable, reached the bottom
答案 1 :(得分:1)
使用break
。
for levelone in file:
for leveltwo in levelone:
for levelthree in leveltwo:
for levelfour in levelfive:
break # Continue levelthree iterations.
答案 2 :(得分:1)
为了递归地执行此操作,您需要测试每个值以查看它是否也是一个dict,这在python中有点难看并且可能效率不高。如果是,则再次调用该函数并将该返回与我们到目前为止的结果相结合。如果它不是一个字典,你就可以在最底层,可以随心所欲地做任何事情。
def recurseDict(nested_dict):
output = []
for key, value in nested_dict.iteritems():
if isinstance(value,dict):
output = output + recurseDict(value)
else:
# Do whatever you want here, I'll just add the values to a list
output.append(nested_dict[key])
return output
示例输入和输出:
In [28]: a = {'blue': 4, 'green': {'yellow': {'black': 16}}, 'red': 3}
In [29]: recurseDict(a)
Out[29]: [4, 16, 3]