使用Dijkstra计算目的地之间的最短路线,字典帮助。 (蟒蛇)

时间:2015-02-25 00:14:52

标签: python dictionary dijkstra

如何在字典中添加值,就像他们在此处所做的那样:How to implement Dijkstra algorithm with Python (solved with all explanations) ?

我正在尝试创建一个程序,使用Dijkstras算法计算出目的地之间的最短路径,请参阅下面的代码。

它目前接收邮政编码并在名为“地理编码”的列表中返回经度和纬度。我仍然需要以某种方式解决每个地理编码之间的差异,然后将其添加到字典中。从那里我将能够实现链接中的代码。

如果有人能帮助我,我将不胜感激。

import urllib.request

userinput = ""
postcodes = []
geocodes = []

while userinput != ("q"):
    print ("Enter postcode, Or q to finish")
    postcode = input()
    if postcode == "q" :
        break
    postcodes.append(postcode)
    print (postcodes)

for each in postcodes:
    geocode = []
    core_string = 'http://uk-postcodes.com/postcode/' + each + '.xml'
    response = urllib.request.urlopen(core_string)
    html = response.read()
    ##print(type(html))
    ##print(html)
    raw_html = str(html) 
    ##print(raw_html)
    ##print(raw_html.find("lat"))
    latStartPoint = raw_html.find("<lat>")+5
    latEndPoint = raw_html.find("</lat>")-1
    lonStartPoint = raw_html.find("<lng>")+5
    lonEndPoint = raw_html.find("</lng>")-1
    lat = (raw_html[latStartPoint:latEndPoint])
    lon = (raw_html[lonStartPoint:lonEndPoint])
    geocode.append(lat)
    geocode.append(lon)
    geocodes.append(geocode)

1 个答案:

答案 0 :(得分:1)

所以你已经建立了两个&#34; parallel&#34;列出postcodesgeocodes - 其中后者的项目是2项字符串 - 你想要一个dicts的dict,其中距离是最终值,在每个级别对密钥进行后期编码

这是对的吗?

然后,唉,真的没有任何捷径......它是一个二次循环。

result = {p: {} for p in postcodes}
joint_list = list(zip(postcodes, geocodes))
for i, (p, g) in enumerate(joint_list):
    g = [float(x) for x in g]
    for j in range(i+1, len(joint_list)):
        op, og = joint_list[j]
        og = [float(x) for x in og]
        dist = distance(g, og)
        result[p][op] = result[op][p] = dist

当然在哪里

import math
def distance(g1, g2):
    return math.hypot(g1[0]-g2[0], g1[1]-g2[1])