Python中是否有内置排序的dictionary模块?

2024-04-20 14:00:03 发布

您现在位置:Python中文网/ 问答频道 /正文

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

因此,如果迭代dict,我希望这些项按值排序。你知道吗


Tags: 排序dictordereddictpriorityqueue
3条回答

你的要求是不可能的。这里是一个简单的素描证明。假设存在一个“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。)

你可以根据值对字典排序,就像这样。。。你知道吗

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

请记住,字典不会被排序到位,您只会得到字典的排序表示。你知道吗

还请注意,您可以定义通过lambda函数对值进行排序的依据。你知道吗

相关问题 更多 >