You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在多层JSON数组中筛选出最短行程(Python实现)

从多层JSON中筛选最短行程的简洁实现

问题背景

我正在开发一个调用Transport API的个人项目,目前用这段Python代码遍历JSON数组里的行程数据:

x = apirequest
x = x.json
for i in range(0,4):
    print(x['routes'][i]['duration'])
    print(x['routes'][i]['departure_time'])
    print(x['routes'][i]['arrival_time'])

这段代码能返回4条行程的时长、出发和到达时间,但我不想用冗长的遍历判断,想直接从多层JSON里筛选出最短行程。我熟悉单层JSON处理,但多层数组操作不太熟,后续还要提取其他字段,求简洁实现方法。

附示例JSON数据:

{
 "request_time": "2018-05-29T19:03:04+01:00",
 "source": "Traveline southeast journey planning API",
 "acknowledgements": "Traveline southeast",
 "routes": [{
 "duration": "06:58:00",
 "route_parts": [{
 "mode": "foot",
 "from_point_name": "Corunna Court, Wrexham",
 "to_point_name": "Wrexham General Rail Station",
 "destination": "",
 "line_name": "",
 "duration": "00:36:00",
 "departure_time": "23:39",
 "arrival_time": "00:15"
 }]
 }]
}

解决方案

核心思路是利用Python内置的min()函数,配合自定义的时长转换逻辑,不用手动遍历就能快速筛选出最短行程。

1. 先把时长字符串转为可比较的数值

因为duration是HH:MM:SS格式的字符串,没法直接比较大小,所以先写个小函数把它转换成总秒数:

def duration_to_seconds(duration_str):
    hours, minutes, seconds = map(int, duration_str.split(':'))
    return hours * 3600 + minutes * 60 + seconds

2. 一键筛选最短行程

直接对routes数组使用min(),通过key参数指定用转换后的秒数作为比较依据,就能直接拿到最短的那条行程对象:

# 注意:requests响应解析需要调用json()方法,你原来的x.json要改成x.json()
x = apirequest.json()

# 筛选最短行程
shortest_route = min(x['routes'], key=lambda route: duration_to_seconds(route['duration']))

# 提取你需要的字段,后续加其他字段直接用shortest_route['字段名']即可
print("最短行程时长:", shortest_route['duration'])
print("出发时间:", shortest_route['departure_time'])
print("到达时间:", shortest_route['arrival_time'])
# 比如提取子行程的步行信息
print("第一段行程方式:", shortest_route['route_parts'][0]['mode'])

3. 边界情况处理

如果API可能返回空的routes数组,记得加个判断避免报错:

if routes := x.get('routes'):
    shortest_route = min(routes, key=lambda route: duration_to_seconds(route['duration']))
else:
    print("未查询到可用行程")

内容的提问来源于stack exchange,提问作者user9866087

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:01:50