Python:如何继续嵌套for循环?

时间:2014-01-13 14:59:27

标签: python for-loop

我正在尝试循环一个具有未知数量的嵌套层的dict。

我想编写一个循环遍历每一层的函数,直到最后。

我认为这里需要一个递归函数,但我想就如何做一些建议。

这是代码逻辑:

for levelone in file:
    for leveltwo in levelone:
        for levelthree in leveltwo:
            for levelfour in levelthree:
                ....

你们有什么想法?

3 个答案:

答案 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]