3 回答
TA贡献1824条经验 获得超8个赞
您永远不需要遍历xrange(len(data))。您可以通过data(对于列表)或data.items()(或values())(对于字典)进行迭代。
您的代码应如下所示:
for elem in data:
for val in elem.itervalues():
for item in val['data']:
这要短得多。
TA贡献1877条经验 获得超6个赞
可以,如果您希望降低数组/哈希事物的任意结构,则可以创建一个函数来基于该type()函数执行此操作。
def traverse_it(it):
if (isinstance(it, list)):
for item in it:
traverse_it(item)
elif (isinstance(it, dict)):
for key in it.keys():
traverse_it(it[key])
else:
do_something_with_real_value(it)
请注意,一般面向对象的专家会告诉您不要这样做,而是创建一个类树,其中一个基于数组,另一个基于dict,然后只有一个函数来处理具有相同函数名的每个函数(即,一个虚拟函数)并在每个类函数中调用它。IE,如果/基于类型的其他树是“坏的”。可以在对象上调用的函数以其自身的“良好”方式处理其内容。
TA贡献1812条经验 获得超5个赞
我认为这就是您要尝试做的。xrange()由于for迭代列表的每个值,因此无需使用从列表中拉出索引的方法。d1因此,在下面的示例中,是对current的引用data[i]。
for d1 in data: # iterate over outer list, d1 is a dictionary
for x in d1: # iterate over keys in d1 (the x var is unused)
for d2 in d1['data']: # iterate over the list
# iterate over (key,value) pairs in inner most dict
for k,v in d2.iteritems():
dostuff()
您还会使用该名称l两次(有意或无意),但要注意作用域的工作原理。
添加回答
举报
