Python如何改变Priority Queue的优先级函数?

How to change the priority function of Priority Queue in Python?

我想在 Python 中实现 Djikstra 算法。因此,当我将图的节点存储在优先级队列中时,我希望它们按照与源节点的距离顺序进行排序。我怎样才能改变优先级函数,以便节点以这种方式排序? 我在队列模块中使用 PriorityQueue Class。默认情况下,输入的整数按降序排列,即最小元素的优先级最高。我想输入一个优先级函数,它根据节点对象中的距离属性对节点进行排序。以下是节点 class - class 节点 节点 距离 有人可以帮我吗?

如文档所述,python 中的 PriorityQueue 似乎不接受自定义比较函数。但是,您可以使用 min 和常规列表来实现您想要的,因为 min 函数调用接受一个 key 函数来决定最小的项目是什么。

class node():
    def __init__(self, dist):
        self.dist = dist

def get_dist(node):
    return node.dist

nodes = [node(4), node(413), node(2), node(14), node(5)]

out = min(nodes, key=get_dist)
nodes.remove(out)
print('popped out:', out.dist) # popped out: 2

out = min(nodes, key=get_dist)
nodes.remove(out)
print('popped out:', out.dist) # popped out: 4

out = min(nodes, key=get_dist)
nodes.remove(out)
print('popped out:', out.dist) # popped out: 5