【问题标题】:First key in OrderedDict that exceeds thresholdOrderedDict 中超过阈值的第一个键
【发布时间】:2015-08-08 09:49:36
【问题描述】:

假设我有一个OrderedDict

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

有没有一种有效的方法来获取键超过某个阈值的第一个值,而不遍历所有键?

例子:

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

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

【问题讨论】:

  • “Python 二进制搜索” 的第一击:bisect。来吧。
  • 请注意,“有序”并不意味着“排序”。
  • 如果键没有按排序顺序,据我所知,不可能存在比遍历键更快的算法。

标签: python key threshold ordereddictionary


【解决方案1】:

您不必自己实现二进制搜索,您可以为此使用bisect。但是,OrderedDict 没有排序,因此您不能对字典键使用二进制搜索,除非您先对它们进行排序,这样效率不会很高(事实上,仅遍历键可能会更快)。

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

我只用过BTree,它是用C编写的,速度很快,但是API有点迟钝。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 2017-10-19
    • 2017-01-10
    • 1970-01-01
    • 2021-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多