我正在使用铁路API返回有关每列火车的JSON数据,例如方向,速度,位置,目的地等。
我正在编写一个简单的函数,它只返回按照我指定的方向行驶的列车。我试图在for循环中这样做。
def getAllTrainsMatchingCriteria(line, direction):
url = 'http://api.example.com/developer/api/v2/vehiclesbyroute?api_key=key&route='+line+'&format=json'
try:
response = (requests.get(url)).json()
except:
print('Unable to connect to API endpoint.')
# Parse Data
for trip in response['direction']:
if trip['direction_name'] == direction:
trains = []
for train in trip['trip']:
trains += train
return trains
以下是我正在使用的数据示例:
{
"route_id": "Route",
"route_name": "Route",
"route_type": "2",
"mode_name": "Commuter Rail",
"direction": [
{
"direction_id": "0",
"direction_name": "Outbound",
"trip": [
{
"trip_id": "Train-800-Weekday",
"trip_name": "8:00 Train from City",
"trip_headsign": "Destination",
"vehicle": {
"vehicle_id": "1701",
"vehicle_lat": "42.0341186523438",
"vehicle_lon": "-71.2189483642578",
"vehicle_bearing": "216",
"vehicle_speed": "0",
"vehicle_timestamp": "1510092937",
"vehicle_label": "1818"
}
},
{
"another example train"
},
{
"another train, etc."
}
]
}
}
如果我在for循环中将火车打印到控制台,我会看到符合我预期的所有列车,并且数据结构正确。
如果我在for循环后打印或返回列车,我看到的只是一组键,例如trip_id,trip_name等。没有值或其他数据。
在这个例子中,只有一列火车符合我的标准,但是假设有3辆火车。我怎样才能让所有三列火车全部完好无损?
答案 0 :(得分:0)
return
一次存在该方法,您应该将其放在for
- 循环之后。接下来,使用字典trains
展开列表train
,这意味着将train
的所有键附加到列表中:
def getAllTrainsMatchingCriteria(line, direction):
url = 'http://api.example.com/developer/api/v2/vehiclesbyroute?api_key=key&route={}&format=json'.format(line)
response = (requests.get(url)).json()
# Parse Data
trains = []
for trip in response['direction']:
if trip['direction_name'] == direction:
trains.expand(trip['trip'])
return trains
答案 1 :(得分:0)
好的,发布后几分钟,我发现另一个类似的例子,其中有人用.append()而不是+ =来添加每个项目。果然,这就是诀窍。
for trip in response['direction']:
if trip['direction_name'] == direction:
trains = []
for train in trip['trip']:
trains.append(train)
return trains
我想我现在应该弄明白为什么。