遍历python中的dict和list

问题描述 投票:3回答:1

所以我从一个API中提取JSON中的数据,该API中包含dicts和多个列表。

result=r.json()
i=0
x=0

for row in r:
    print('Driver ID: ', result['logs'][x]['log']['driver']['username'])
    print('First Name: ', result['logs'][x]['log']['driver']['first_name'])
    print('Last Name: ', result['logs'][x]['log']['driver']['last_name'])
    for row1 in r:
        print('ID: ', result['logs'][x]['log']['events'][i]['event']['id'])
        print('Start Time: ', result['logs'][x]['log']['events'][i]['event']['start_time'])
        print('Type: ', result['logs'][x]['log']['events'][i]['event']['type'])
        print('Location: ', result['logs'][x]['log']['events'][i]['event']['location'])
        i=i+1
    x=x+1

我得到的错误是

print('ID: ', result['logs'][x]['log']['events'][i]['event']['id'])
IndexError: list index out of range

我知道变量i加起来在该索引处没有对象,问题是'events'键在每个列表中都有可变数量的事件。例如,第一个驱动程序的日志可能有7个事件,下一个驱动程序只能有3个事件。有没有办法根据事件中存在的索引数运行循环?

我也尝试使用带有'result'而不是'r'的循环,但我对Python很新,而且我得到的结果并不正确。

这是API Doc的链接。我定位的端点是/ logs。 https://developer.keeptruckin.com/reference#get-logs

python json python-3.x rest api
1个回答
2
投票

您应该在根级别遍历子列表而不是result dict,并避免使用索引:

result = r.json()

for log in result['logs']:
    print('Driver ID: ', log['log']['driver']['username'])
    print('First Name: ', log['log']['driver']['first_name'])
    print('Last Name: ', log['log']['driver']['last_name'])
    for event in log['log']['events']:
        print('ID: ', event['event']['id'])
        print('Start Time: ', event['event']['start_time'])
        print('Type: ', event['event']['type'])
        print('Location: ', event['event']['location'])
© www.soinside.com 2019 - 2024. All rights reserved.