首页 > 解决方案 > 循环遍历python中的嵌套字典

问题描述

我希望遍历以下 json 字典:

hgetjsonObject = {
    u 'jsonrpc': u '2.0', u 'result': [{
        u 'hosts': [{
            u 'status': u '0',
            u 'hostid': u '10394',
            u 'name': u 'vsclap01l'
        }, {
            u 'status': u '0',
            u 'hostid': u '10395',
            u 'name': u 'vsclap03l'
        }, {
            u 'status': u '0',
            u 'hostid': u '10396',
            u 'name': u 'vscldb04l'
        }],
        u 'groupid': u '4',
        u 'name': u 'Zabbix servers'
    }], u 'id': 2
}

这是我到目前为止所尝试的:

print(hgetjsonObject['result'][0]['hosts'][0])

但是当我运行它时,它会中止以下内容:

{u'status': u'0', u'hostid': u'10394', u'name': u'vsclap01l'}
Traceback (most recent call last):
  File "./automaton.py", line 341, in <module>
    print(hgetjsonObject['result'][0]['hosts'][0])
IndexError: list index out of range

我希望能够做这样的事情:

for eachhost in hgjsonObject['result']:
    print(eachhost['hostid'],eachhost['name'])

当我运行 for 循环时,我得到了错误。

标签: pythonjson

解决方案


I see two problems. 1) there is space between u an field in your dictionary which will cause issue.

2) because result is a list and under that hosts is another list, you should iterate through both the lists

for eachresult in hgetjsonObject['result']:
         for eachhost in eachresult['hosts']:
             print(eachhost['hostid'],eachhost['name'])

Output:

10394 vsclap01l 10395 vsclap03l 10396 vscldb04l


推荐阅读