2024-04-20 14:00:03 发布
网友
我知道有一个OrderedDict类,但我真正想要的是dict和PriorityQueue的混合。你知道吗
因此,如果迭代dict,我希望这些项按值排序。你知道吗
你的要求是不可能的。这里是一个简单的素描证明。假设存在一个“DictionQueue”。因为它就像一个python字典,它有O(1)个键、值对的插入、检索和删除。因为它类似于优先级队列,所以它允许您按排序顺序对值进行迭代。如果我有N个值,我可以将它们插入到“DictionQueue”中,并作为排序这些值的方法对它们进行迭代。N项的插入/迭代顺序是O(N),但是我们知道最快的比较排序是O(N*log(N))。因此,“DictionQueue”不能存在。你知道吗
可能仍然有一个数据结构比字典更适合您的目的,但是您需要定义您愿意妥协的地方。例如,您需要按键检索还是只需要插入和迭代?你知道吗
d = { ... } print sorted(d, key=lambda x: d[x])
Edit:您在一个注释中指出,您不关心性能,而是希望客户机代码(使用dict的代码)尽可能干净和简单。您可以尝试以下方法:
# hide the "sorted" business in a class class ValueSortedDict(dict): def sorted_by_value(self): return sorted(self, key=lambda x: self[x]) # client code just calls sorted_by_value vsd = ValueSortedDict({ ... }) print vsd.sorted_by_value()
(FTR,如果是我,我不会使用这种方法;我会根据需要调用sorted。)
sorted
你可以根据值对字典排序,就像这样。。。你知道吗
my_dict = {...} for key in sorted(my_dict, key=lambda x: my_dict[x]): print (key + " " + my_dict[key])
请记住,字典不会被排序到位,您只会得到字典的排序表示。你知道吗
还请注意,您可以定义通过lambda函数对值进行排序的依据。你知道吗
你的要求是不可能的。这里是一个简单的素描证明。假设存在一个“DictionQueue”。因为它就像一个python字典,它有O(1)个键、值对的插入、检索和删除。因为它类似于优先级队列,所以它允许您按排序顺序对值进行迭代。如果我有N个值,我可以将它们插入到“DictionQueue”中,并作为排序这些值的方法对它们进行迭代。N项的插入/迭代顺序是O(N),但是我们知道最快的比较排序是O(N*log(N))。因此,“DictionQueue”不能存在。你知道吗
可能仍然有一个数据结构比字典更适合您的目的,但是您需要定义您愿意妥协的地方。例如,您需要按键检索还是只需要插入和迭代?你知道吗
Edit:您在一个注释中指出,您不关心性能,而是希望客户机代码(使用dict的代码)尽可能干净和简单。您可以尝试以下方法:
(FTR,如果是我,我不会使用这种方法;我会根据需要调用
sorted
。)你可以根据值对字典排序,就像这样。。。你知道吗
请记住,字典不会被排序到位,您只会得到字典的排序表示。你知道吗
还请注意,您可以定义通过lambda函数对值进行排序的依据。你知道吗
相关问题 更多 >
编程相关推荐