OrderedDict中第一个超过阈值的键

时间:2015-05-26 15:52:02

标签: python key threshold ordereddictionary

说我有OrderedDict

a = OrderedDict([(5, 'a'), (7, 'b'), (10, 'c')])

是否有一种有效的方法来获取其密钥超过某个阈值的第一个值,没有循环所有密钥?

示例:

>>> get_first(a, 6)
'a'
>>> get_first(a, 3)
None
>>> get_first(a, 8)
'b'

我想避免自己实现二进制搜索。是否有高效的开箱即用实施?

1 个答案:

答案 0 :(得分:0)

您不必自己实施二进制搜索,您可以使用bisect。但是,OrderedDict没有排序,所以你不能在字典键上使用二进制搜索,除非你先对它们进行排序,这样效率不高(实际上,循环键可能会更快)。 / p>

如果您维护一个已排序的键列表,那么这可能有效,或者如果您使用已排序的字典的实现。您可以使用内置的collections.OrderedDict但是您必须自己维护排序,或者您可以使用一些btree实现,我认为有几个。

我只使用BTree,它用C语言写得非常快,但API有点迟钝。