Python中是否有一个带有内置命令的字典模块?

时间:2015-06-14 02:48:37

标签: python

我知道有一个OrderedDict类,但我真正想要的是dict和PriorityQueue之间的混合。

因此,如果遍历dict,我希望按值排序项目。

4 个答案:

答案 0 :(得分:1)

您可以根据这样的值对字典进行排序......

my_dict = {...}
for key in sorted(my_dict, key=lambda x: my_dict[x]):
    print (key + " " + my_dict[key])

请记住,字典不会被排序到位,您只需获得字典的排序表示。

另请注意,您可以通过lambda函数定义对值进行排序的基础。

答案 1 :(得分:1)

d = { ... }
print sorted(d, key=lambda x: d[x])

编辑:您在评论中表示您不关心表现;相反,您更喜欢客户端代码(使用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。)

答案 2 :(得分:1)

你要求的是不可能的。这是一个简单的草图证明。让我们说一个" DictionQueue"存在。因为它类似于python字典,所以它具有O(1)插入,检索和删除键,值对。因为它类似于优先级队列,所以它允许您按排序顺序迭代值。如果我有N个值,我可以将它们插入到" DictionQueue"并迭代它们作为排序这些值的方法。 N个项目的插入/迭代将是O(N),但我们知道最快的比较排序是O(N * log(N))。因此," DictionQueue"不存在。

对于您的目的,可能仍然存在比字典更好的数据结构,但您需要定义您愿意妥协的位置。例如,您是需要按键检索还是仅需要插入和迭代?

答案 3 :(得分:1)

您是否考虑过第三方实施?这是一个:SortedDictsortedcontainers包的一部分。