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

问题描述

我对python来说还很陌生,我正在尝试如何基于字典创建优先级队列,该字典根据每个键的第一个值将输入排序为最低优先级。像这样:

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

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

编辑在字典中本应为“()”的地方我不小心使用了“ {}”。

解决方法

您需要优先选择吗?也许不吧。仅对字典进行排序可能会很有用。

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,'value5'),'key_1': (3,'value2')}

,

我相信这可以为您提供所需的内容,尽管由于您的代码仅需要进行重大更改才能运行,因此很难确定,

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]
,

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

中找到使用它的示例

完全公开:我从Java移植了fibonacci堆mod到Python。

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