如何使用字典中每个键的第一个值有效地创建优先级队列

How to efficiently create a priority queue using every key's first value in a dictionary

我是 python 的新手,我正在尝试如何基于字典创建优先级队列,在字典中它根据每个键的第一个值将输入排序为最低优先。像这样:

my_dictionary = {'a': (3, 'data1'), 'b': (1, 'data2'), 'c': (2, 'data3')}

我希望以某种方式获得顺序为 key_2、key_3、key_1 的输出。我只希望它优先考虑第一个值,其他值只是占位符。我以前从未在 Python 中使用过优先级队列,所以欢迎大家提供帮助!

编辑 我不小心在字典中使用了“{}”,而它本应是“()”。

我相信这可以满足您的需求,尽管很难确定,因为您的代码需要对 运行:

进行重大更改
value2 = 2
value4 = 4
value5 = 5
my_dictionary = {'key_1': [3, value2], 'key_2': [1, value4], 'key_3': [2, value5]}

sorted_dict = sorted(my_dictionary.items(), key=lambda x: x[1][0])

for i in sorted_dict:
    print(i[0])

print()

for i in sorted_dict:
    print(i[0], i[1])

结果:

key_2
key_3
key_1

key_2 [1, 4]
key_3 [2, 5]
key_1 [3, 2]

您需要优先队列吗?也许不吧。只是对字典进行排序可能会有用。

my_dictionary = {'key_1': (3, 'value2'), 'key_2': (1, 'value4'), 'key_3': (2, 'value5')}

sorted_dict = {k:v for k, v in sorted(my_dictionary.items(), key=lambda item: item[1][0])}

print(sorted_dict)

输出:

{'key_2': (1, 'value4'), 'key_3': (2, 'value5'), 'key_1': (3, 'value2')}

我想你想要一个优先级队列,其中键是你值中的数字,值是你想要取回的数据。它需要对数据进行一些重组,但如果您有很多值,或者如果您在循环内更新和搜索数据,那么这可能是值得的。 https://pypi.org/project/fibonacci-heap-mod/ 可以在 https://stromberg.dnsalias.org/svn/fibonacci-heap-mod/trunk/test-fibonacci-heap-mod

找到使用它的示例

完全披露:我将斐波那契堆 mod 从 Java 移植到 Python。

您也可以使用 Python 标准库的 heapq module 执行此操作,如果您添加 class 的实例,该实例按一个属性(您的小数字)排序并允许其他人的查找(键和列表)。这可以通过 Python 丰富的比较方法来完成 - 让他们关注您优先考虑的内容,并让他们忽略您不想参与优先级排序本身的内容。