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
进行初始化,以避免使用太复杂的条件结构。但不管怎样,你有权这么做。