【问题标题】:Filtering specific data out of an api in python?从python中的api中过滤特定数据?
【发布时间】:2020-09-11 04:07:46
【问题描述】:

我尝试从我从飞机跟踪网站的 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 代码的第十一个元素(当像 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 ?由于类型错误,在对“目标”进行排序后立即使用字典函数对它们进行排序不起作用,如果我尝试找到它的索引,它会给我一个值错误,并说该元素不属于列表(但它显然在那里)。

另外,如何打印代码和条目的第十一个元素?

期待你的回答

【问题讨论】:

    标签: python list api dictionary types


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回复。我会试试这个。到目前为止,我尝试过的(并且有效)如下:for i in range(0,len(data)): newlist.append(data[i][17][0]) newlist.append(data[i][11]) print(newlist) 结果如下:['HB-1537', 0.1, 'HB-3205', -0.097, 'HB-1796', -0.6] 现在出现的问题是似乎很难在列表中搜索字母组合和整数。以下总是给我一个值错误,并说它不是列表的一部分:Planes=['HB-1796'] newlist.index(Planes)
    • 有了newlist,你不应该做planes=['..'],而是planes = '..'。这就是你现在得到 ValueError 的原因。如果您只想选择一些,那么我会先解决这个问题,然后再担心稍后格式化数据。所以首先做一些类似newdata = [entry for entry in data if entry[0] == 'icao:...'][entry for entry in data if entry[17][0] == 'HB-1796']甚至[entry for entry in data if entry[17][0] in Planes]的事情。
    猜你喜欢
    • 1970-01-01
    • 2020-11-18
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多