TypeError:不支持+的操作数类型:“dict”和“float”

2024-05-13 21:46:56 发布

您现在位置:Python中文网/ 问答频道 /正文

这段代码的第26行给了我一个错误,我无法修复它。请帮我弄清楚。 这是一条线: path[road]['distance_from_start'] = path.get(road, {}).get('distance_from_start') + path.get(road, {}).get('distance_to_neighbor') 它应该找到的是地图中起点和终点之间有多个中间站的最短路径。在

import math
def my_function(M, start, goal):
    frontier = set([start])
    expanded = set()
    chosen = start
    chosen_coordinates = M.intersections[chosen]
    goal_coordinates = M.intersections[goal]
    roads_to_choose = M.roads[chosen]
    path = {}
    while frontier != set():
        if chosen != goal:
            for road in roads_to_choose:
                if road not in expanded:
                    frontier.add(road)
                    path[road] = {}
                    path[road]['coordinate'] = {}
                    path[road]['roads'] = {}
                    path[road]['distance_to_goal'] = {}
                    path[road]['distance_to_neighbor'] = {}
                    path[road]['distance_from_start'] = {}
                    path[road]['g_plus_h'] = {}
                    path[road]['path_list'] = {}
                    path[road]['coordinate'] = M.intersections[road]
                    path[road]['roads'] = M.roads[road]
                    path[road]['distance_to_neighbor'] = math.sqrt(((M.intersections[road][0]-chosen_coordinates[0])**2) + ((M.intersections[road][1]-chosen_coordinates[1])**2))
                    path[road]['distance_from_start'] = path.get(road, {}).get('distance_from_start') + path.get(road, {}).get('distance_to_neighbor')
                    path[road]['distance_to_goal'] = math.sqrt(((goal_coordinates[0]-M.intersections[road][0])**2) + ((goal_coordinates[1]-M.intersections[road][1])**2))
                    path[road]['g_plus_h'] = path[road]['distance_from_start'] + path[road]['distance_to_goal']
                    path[road]['path_list'] = path[chosen]['path_list'].append(road)
            frontier.remove(chosen)
            expanded.add(chosen)
            if x not in expanded:
                chosen = min(path.keys(), key=lambda x:path[x]['g_plus_h'])
                path[road]['distance_from_start'] = path.get(chosen, {}).get('distance_from_start')
        else:
            print("Short path called")  
            return path[goal]['path_list']

Tags: topathfromgetstartdistancefrontierchosen
1条回答
网友
1楼 · 发布于 2024-05-13 21:46:56

您正在尝试添加两个字典项,如下所示:

x={}
y={}
z = x+ y

这是错误的方法,这就是为什么你得到这个错误。你到底想怎么处理这两个听写,你的结果取决于这一点。如果要合并它们,请尝试以下操作:

在Python3.5或更高版本中:

^{pr2}$

在Python2(或3.4或更低版本)中,编写一个函数:

def merge(x, y):
    z = x.copy()   
    z.update(y)   
    return z
z = merge(x, y)

通过查看您的代码,您的问题可以通过在开始时更改分配来解决

path[road]['distance_to_neighbor'] = 0
path[road]['distance_from_start'] = 0

然后你就可以得到你的结果了。在

相关问题 更多 >