问题描述
我对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丰富的比较方法来完成-让他们注意您的优先级,让他们忽略您不想参与的优先级本身。