Python:如何遍历List [Dict {List [Dict {}]}]

我只是想知道是否有一种简单的方法来做到这一点。我有一个从文件解析的特殊结构,输出是字典列表的字典列表。目前,我只有一些看起来像这样的代码:


for i in xrange(len(data)):

    for j, k in data[i].iteritems():

        for l in xrange(len(data[i]['data'])):

            for m, n in data[i]['data'][l].iteritems():

                dostuff()

我只是想知道是否有一个遍历结构的函数,并在内部确定每个条目是列表还是字典,如果是字典,则遍历该字典,依此类推。我只使用Python大约一个月左右,所以我绝不是该语言的专家,甚至不是中级用户。预先感谢您的回答。


拉莫斯之舞
浏览 342回答 3
3回答

有只小跳蛙

您永远不需要遍历xrange(len(data))。您可以通过data(对于列表)或data.items()(或values())(对于字典)进行迭代。您的代码应如下所示:for elem in data:    for val in elem.itervalues():        for item in val['data']:这要短得多。

慕哥9229398

可以,如果您希望降低数组/哈希事物的任意结构,则可以创建一个函数来基于该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,如果/基于类型的其他树是“坏的”。可以在对象上调用的函数以其自身的“良好”方式处理其内容。

ABOUTYOU

我认为这就是您要尝试做的。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两次(有意或无意),但要注意作用域的工作原理。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python