我试图编写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.

推荐答案

defaultdict的意义在于始终使用括号中的访问——.get(...)保留其原始语义(继承自dict):

>>> shortest_paths = defaultdict(lambda:math.inf)
>>> shortest_paths[5]
inf
>>> shortest_paths.get(5)
inf
>>> print(shortest_paths.get(6))
None

Python-3.x相关问答推荐

PythonPandas -通过知道位置(Loc)而不是索引来删除行

如何转换Pandas中的数据,以使我 Select 的列名变为行值并增加行?

While循环不停止地等待,直到时间.睡眠结束

十进制浮点数到整型的转换错误

如何使用python将pdf文件的页面合并为单个垂直组合页面

在Pandas中,根据另一列中的重复值将数据分组为一列

如何获取实例化 `types.GenericAlias` 的下标类?

DataFrame列中如何迭代重复值?

Sunburst 折线图可视化

我正在使用 python 线程,当查询 mysql 时,代码似乎在运行并保持在无限循环中,没有返回任何错误

在 pytest 中,如何测试 sys.exit('some error message')?

Dask 多阶段资源设置导致 Failed to Serialize 错误

在 Django 中执行 JSONRenderer.render(serialized_student_data.data) 时遇到问题

将字典列表展平为数据框列

魔术8球txt文件列表

请求:RecursionError:超出最大递归深度

具有 2 个输入的 python 3 map/lambda 方法

简单的 get/post 请求在 python 3 中被阻止,但在 python 2 中没有

导入 python 模块而不实际执行它

对字节进行按位运算