处理字典列表中的数据(Google API距离矩阵)

时间:2015-12-17 00:09:52

标签: python list dictionary google-distancematrix-api

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

"原点1:最近的目的地是目的地1(1504米)"

"原点2:最近的目的地是目的地1(2703米)"

所以......

任何ideia如何获得此输出?

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'}]\

1 个答案:

答案 0 :(得分: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)))