0

我需要帮助。我正在使用 Google API 距离矩阵和 Python 3.5 来找出距另一点最近的点。我有下面的字典列表,我想有如下输出:

“起点 1:最近的目的地是终点 1 (1504 m)”

“起点 2:最近的目的地是终点 1 (2703 m)”

很快..

任何想法我怎样才能获得这个输出?

response=[{'rows': [{'elements': [{'distance': {'text': '1.5 km', 'value': 1504},\
'duration': {'text': '4 mins', 'value': 247}, 'status': 'OK'}]}],\
'origin_addresses': ['Origin 1'], 'destination_addresses': ['Destination 1'], 'status': 'OK'},\
{'rows': [{'elements': [{'distance': {'text': '2.7 km', 'value': 2703},\
'duration': {'text': '7 mins', 'value': 430}, 'status': 'OK'}]}],\
'origin_addresses': ['Origin 2'], 'destination_addresses': ['Destination 1'], 'status': 'OK'},\
{'rows': [{'elements': [{'distance': {'text': '4.8 km', 'value': 4753},\
'duration': {'text': '10 mins', 'value': 586}, 'status': 'OK'}]}],\
'origin_addresses': ['Origin 1'], 'destination_addresses': ['Destination  2'], 'status': 'OK'},\
{'rows': [{'elements': [{'distance': {'text': '6.0 km', 'value': 5952},\
'duration': {'text': '13 mins', 'value': 769}, 'status': 'OK'}]}],\
'origin_addresses': ['Origin 2'], 'destination_addresses': ['Destination 2'], 'status': 'OK'}]\
4

1 回答 1

0

以下代码将找到与每个原点的最短距离,然后按照示例格式显示结果:

from collections import OrderedDict

def find_closest(distances):
    closest = OrderedDict()
    for distance in distances:
        origin = distance['origin_addresses'][0]
        destination = distance['destination_addresses'][0]
        value = distance['rows'][0]['elements'][0]['distance']['value']

        if origin not in closest or value < closest[origin][1]:
            closest[origin] = (destination, value)

    return closest

def format_closest(closest):
    for origin, (destination, value) in closest.items():
        yield "%s: the closest destination is %s (%d m)" % (origin, destination, value)

for line in format_closest(find_closest(response)):
    print(line)

请注意,我使用 OrderedDict 来保留在您的回复中找到的排序。如果这对您来说不重要,您可以替换OrderedDict(){}.

对于格式化结果的列表,只需使用:

list(format_closest(find_closest(response)))
于 2015-12-17T01:24:22.507 回答