Python 列表和听写的迭代器

Python 列表和听写的迭代器,python,iterator,python-3.x,Python,Iterator,Python 3.x,我有一个参数字典,包含由字符串、列表和其他字典组成的复杂数据。现在我想遍历这些数据 我的问题是拥有迭代器的方法——最佳实践,迭代器可以迭代列表和字典 我所拥有的: def parse_data(key, value): iterator = None if isinstance(value, dict): iterator = value.items() elif isinstance(value, list): iterator = e

我有一个参数字典,包含由字符串、列表和其他字典组成的复杂数据。现在我想遍历这些数据

我的问题是拥有迭代器的方法——最佳实践,迭代器可以迭代列表和字典

我所拥有的:

def parse_data(key, value):
    iterator = None

    if isinstance(value, dict):
        iterator = value.items()
    elif isinstance(value, list):
        iterator = enumerate(value)

    if iterator is not None:
        for key, item in iterator:
            parse_data(key, item)
        return

    # do some cool stuff with the rest
这看起来不太像蟒蛇。我想到了一个函数,类似于让我能够迭代键和项

希望您能帮忙。

非常感谢advanced。

我认为这是一个非常好的例子。我只想把它改成:

def parse_data:

    if isinstance(value, dict):
        iterator = value.items()
    elif isinstance(value, list):
        iterator = enumerate(value)
    else:
        return

    for key, item in iterator:
        parse_data(value, key, item)

    # do some cool stuff with the rest

我不确定是否有一种更短的方法来完成它,但是Python是为了做一件事而构建的,有许多不同的方法。也许这是另一种方式。我还没有测试过,所以可能不起作用

def parse_data(key,value):
    iterator = isinstance(value,dict) 

    if iterator is False and isinstance(value,list):
        iterator = enumerate(value)

    if iterator is not None: 
        for key,item in iterator: 
            parse_data(key,item) 
        return      

    #do some cool stuff with the rest 

我不知道你这样做有什么不好。@CharlesBrunet我想到了一个典型的pythonish恶作剧来缩短我还不知道的东西。我编辑了我的问题。只是忘记了
parse_data
的参数。我使用了一个独立的函数来显示我的问题。我修改了代码,它不是很短,但可能是另一种方式。看起来很有希望。我会测试的。事实上,我想它短了几行。让我知道它是否对您有效。您希望通过
dict.get
实现什么?我只能对字典实例调用
get
。这不是一个静态的方法。有了这个,
#用剩下的做一些很酷的事情
永远不会被调用。什么?当然是。只有当
的类型不合适时,才会出现过早的
返回
。我在代码中使用此注释的目的是在处理其他类型值(如字符串)的位置签名。这就是为什么我使用
iterator=None
进行初始化,以避免使用太复杂的条件结构。但不管怎样,你有权这么做。