我正在将一个C++程序移植到Python。有些地方它使用
std::set
来存储定义了自己比较运算符的对象。由于Python标准库没有等价的std::set
(一个排序的键值映射数据结构),所以我尝试使用普通字典,在迭代时进行排序,就像这样:def __iter__(self):
items = self._data.items()
items.sort()
return iter(items)
然而,分析表明所有从.sort()
调用到__cmp__
的调用都是严重瓶颈。我需要一种更好的数据结构 - 基本上是一个排序字典。有人知道现有实现吗?如果没有,您有任何建议应该如何实现它?读取性能比写入性能更重要,时间比内存更重要。如果支持每个键多个值,例如C++的std::multimap
,那么奖励分数将更高。请注意,OrderedDict
类不符合我的需求,因为它按插入顺序返回项目,而我需要使用其__cmp__
方法排序。