如何在python中迭代多级dict

时间:2015-10-16 08:38:47

标签: python json dictionary

我有一个json输出,它是一个字典的形式。迭代它时,我没有得到值。我在这里缺少什么?

以下是dict类型的示例json输出。你可以看到有两个级别。因此,一旦我达到'level2',我就需要迭代这里未显示的下一个级别,因为我已将数据修剪为一个项目。

data = {u'level1':
            {u'level2': [{u'Data':
                            {u'id': u'220',
                             u'byte': u'13',
                             u'time': u'1444',
                             u'ch': u'38'}}]}}

我尝试的内容如下:

d=[]
for x in data['level2']:
    d.append(x['Data']['id'])

不确定我为什么会输出空白。

4 个答案:

答案 0 :(得分:3)

尝试这样的递归函数:

def walkdict(data):
    for k, v in data.items():
        if isinstance(v, dict):
            walkdict(v)
        else:
            print("{0} : {1}".format(k, v))

答案 1 :(得分:1)

目前还不清楚你想要什么"迭代",特别是因为你削减了数据并且没有真正指定你想要的输出。

所以这是基于添加更多样本数据的猜测:

data = {u'level1':
            {u'level2': [{u'Data':
                            {u'id': u'220',
                             u'byte': u'13',
                             u'time': u'1444',
                             u'ch': u'38'}},
                         {u'Data':
                            {u'id': u'440',
                             u'byte': u'26',
                             u'time': u'2888',
                             u'ch': u'76'}}]}}

ids = []
for item in data['level1']['level2']:
    ids.append(item['Data']['id'])

print(ids)  # -> [u'220', u'440']

通过将for循环置于所谓的list comprehension内,您可以更简洁地获得相同的结果(可读性有所损失):

ids = [item['Data']['id'] for item in data['level1']['level2']]

答案 2 :(得分:0)

level2 的值是列表。所以,你必须这样遍历:

data={u'level1': {u'level2': [{u'Data': {u'id': u'220', u'byte': u'13', u'time': u'1444', u'ch': u'38'}}]}}
d = []
for x in data['level1']['level2']:
    d.append(x['Data']['id'])

>>> d
['220']

答案 3 :(得分:0)

for k, v in data.items():
    p = v.get('level2')
    if p:
        print p['Data']['id']

也许。