按多个元素在列表列表中查找项目

时间:2016-05-06 11:40:41

标签: python python-2.7 sorting search

我使用网络API获取一些地理信息,这些信息以下列格式返回数据:

[
    [lat, lon, another_value, more_values...],
    [lat, lon, another_value, more_values...],
    ...
]

每个子列表中的前两个值(latlon值)可以一起被视为唯一标识符。我多次调用此API来更新我的数据,并且希望能够用新值替换已存在的任何lat / lon对。

我最初的想法是按latlon值对列表列表进行排序,然后进行二分查找,但是有很多关于如何按单个子列表排序的示例我无法解决如何按多个列表元素排序的问题。当然,如果有人有更好的方法来识别前两个元素的子列表,那也将非常感激!

2 个答案:

答案 0 :(得分:3)

您可以使用字典在从API获取数据时存储和查询数据。这样你就可以使用元组(lat,lon)作为密钥。

d = {}
for line in result:
    d[line[0], line[1]] = line[2:]

只要数据格式固定,就可以一次性存储和查询。

答案 1 :(得分:1)

@Yasser Elsayed的答案非常好,但是如果您仍然希望按纬度和经度对数据进行排序,则应使用operator.itemgetter()

import operator as op

data = [[0.0, 24.6, 13],
        [1.0, 53.3, 8],
        [1.0, 51.1, 12],
        [-1.7, 37.4, 26]] # arbitrary sample data

data = sorted(data, key=op.itemgetter(0, 1))

print data
# [[-1.7, 37.4, 26], [0.0, 24.6, 13], [1.0, 51.1, 12], [1.0, 53.3, 8]]