如何使用字典中每个键的第一个值有效地创建优先级队列
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 丰富的比较方法来完成 - 让他们关注您优先考虑的内容,并让他们忽略您不想参与优先级排序本身的内容。
我是 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 丰富的比较方法来完成 - 让他们关注您优先考虑的内容,并让他们忽略您不想参与优先级排序本身的内容。