从python中的api过滤掉特定数据?

时间:2020-05-24 13:44:32

标签: python list api dictionary types

我尝试从飞机跟踪网站的api请求中获得的列表中“过滤”一些特定数据。

import json, urllib.request
url = "https://ktrax.kisstech.ch/backend/tracking?db=aviation&sw_lat=47.32453673528682&sw_lon=7.87192272434162&ne_lat=47.35361867238683&ne_lon=7.899774782752265&max_results=300&max_age=1960&apikey=TRACK-c47d70c58861af97"

response = urllib.request.urlopen(url)

data = json.load(response)['targets']
print(data)

plane = data.index('icao:4B4BAB')
print(plane)

如您所见,我已经利用json数据作为字典并对列表“目标”进行排序。然后产生以下输出(类型=列表)。

[['icao:4B51E1', 1, '2020-05-24T13:18:53Z', 0, 47.349683, 7.8754167, 1067, 0, 3, 28, 47, -0.6, 15, 0, 1, 0, 'LSPO', ['HB-3386', 'O7', '-', '-'], 100, 0, 0], ['icao:4B4BF5', 1, '2020-05-24T13:18:53Z', 0, 47.3497, 7.87945, 1593, 0, 1, 29, 248, 0.9, -0.9, 0, 1, 0, 'LSPO', ['HB-1870', 'FC', '-', '-'], 100, 0, 0], ['icao:4B512D', 1, '2020-05-24T13:18:53Z', 0, 47.349617, 7.87505, 990.6, 0, 2, 29, 79, -1.1, 11, 0, 1, 0, 'LSPO', ['HB-3206', 'O6', '-', '-'], 100, 0, 0], ['icao:4B5105', 1, '2020-05-24T13:18:48Z', 5, 47.343817, 7.88915, 459, 0, 2, 0, 1800, 0.1, 0, 0, 1, 0, 'LSPO', ['HB-3166', 'O2', '-', '-'], 100, 0, 0], ['icao:4B4AA8', 1, '2020-05-24T13:18:35Z', 19, 47.343867, 7.8887167, 465.7, 0, 1, 0, 1800, 0.1, 0, 0, 1, 0, 'LSPO', ['HB-1537', 'W', '-', '-'], 100, 0, 0], ['icao:4B51B4', 1, '2020-05-24T13:18:51Z', 2, 47.3437, 7.8885, 464.8, 0, 2, 0, 1800, -0.097, 0, 0, 1, 0, 'LSPO', ['HB-3341', 'AK', '-', '-'], 100, 0, 0], ['icao:4B4BAB', 1, '2020-05-24T13:18:47Z', 6, 47.344083, 7.8883, 460.9, 0, 2, 0, 1800, -0.097, 0, 0, 1, 0, 'LSPO', ['HB-1796', '-', '-', '-'], 100, 0, 0], ['flarm:DD810E', 1, '2020-05-24T13:18:47Z', 6, 47.344017, 7.8890333, 460.9, 0, 3, 0, 1800, 0, 0, 0, 0, 0, 'LSPO', ['-', '-', '-', '-'], 100, 0, 0], ['icao:4B4ADC', 1, '2020-05-24T13:18:54Z', 0, 47.338767, 7.8773333, 814.7, 0, 2, 24, 309, 0.2, 6.3, 0, 1, 0, 'LSPO', ['HB-1589', '-', '-', '-'], 100, 0, 0]]

现在,我只想过滤出icao:...的特定条目,然后从列表中读取特定icao代码的第11个元素(当像python一样计数时),该元素表示飞机的高度差。

示例:['icao:4B51E1', '-0.6', 'icao:4B51B4', '-0.097']

现在我的问题是,这样的条目:['icao:4B4BAB', 1, '2020-05-24T13:18:47Z', 6, 47.344083, 7.8883, 460.9, 0, 2, 0, 1800, -0.097, 0, 0, 1, 0, 'LSPO', ['HB-1796', '-', '-', '-'], 100, 0, 0]标记了一个列表条目。现在,我如何首先在整个列表中搜索特定的icao:4B4BAB?由于类型错误,使用“分类”函数对“目标”进行排序后无法立即对其进行分类,如果我尝试找到它的索引,则会给我一个“值错误”,并表示该元素不属于列表(但显然在那里)。

此外,如何打印代码和条目的第11个元素?

期待您的答案

1 个答案:

答案 0 :(得分:0)

您可以遍历data列表并检查数据中每个列表的第一个元素。

for plane in data:
    if plane[0] == 'icao:4B4BAB':
        print(plane[0], plane[11])

ValueError是因为icao代码实际上不是data列表中的条目,而是在data列表的第一个元素中,而该元素又是另一个列表。 / p>