我试图编写Dijkstra最短路径算法的一个变体.在执行此操作时,我希望将最短路径距离初始化为math.inf
,并为任何未看到的键返回此值.
我使用的是defaultdict,初始化为defaultdict(lambda:math.inf)
,希望为一个新密钥返回一个无限值.
然而,在下面的示例中,我没有看到返回任何值.
初始化:
shortest_paths = defaultdict(lambda:math.inf)
shortest_paths[k] = 0
print(f"Initial values for shortest_paths = {shortest_paths}")
这张照片是:
Initial values for shortest_paths = defaultdict(<function Solution.networkDelayTime.<locals>.<lambda> at 0x1044818b0>, {2: 0})
电话:
print(f"n={n} and shortest_paths.get(n) = {shortest_paths.get(n)}")
这张照片是:
n=1 and shortest_paths.get(n) = None
这最终导致None对象和整数值之间的比较, destruct 了我的代码.
shortest_paths[n] = min(shortest_paths.get(n), shortest_paths.get(current) + dist)
导致:
TypeError: '<' not supported between instances of 'int' and 'NoneType'
我想弄清楚的是defaultdict的值是如何没有被初始化的.
粘贴在REPL上的这段代码运行良好.如果相关的话,我正在使用VSCode.