如何在 python 中迭代多级字典



我有一个字典形式的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'])

不知道为什么我得到空白输出。

尝试这样的递归函数:

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

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

因此,以下是基于添加更多示例数据的猜测:

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循环置于所谓的列表 理解中,您可以更简洁地获得相同的结果(但会损失一些可读性(:

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

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']
for k, v in data.items():
    p = v.get('level2')
    if p:
        print p['Data']['id']

或。

最新更新