Python字典浮点搜索范围内



假设我有某种类似的字典结构(或代表同一件事的其他数据结构。

d = {
  42.123231:'X',
  42.1432423:'Y',
  45.3213213:'Z',
  ..etc
}

我想创建一个这样的函数:

f(n,d,e):
    '''Return a list with the values in dictionary d corresponding to the float n
    within (+/-) the float error term e'''

因此,如果我用上述字典称呼这样的函数:

f(42,d,2)

它将返回

['X','Y']

但是,虽然用循环编写此功能很简单,但我不想做一些词典中每个值并详尽地检查它的事情,但是我希望它以某种方式利用索引结构(甚至可以使用一个排序的列表)使搜索更快。

字典是错误的数据结构。写一个搜索树。

python字典是哈希图实现。它的钥匙不能被比较并在搜索树中进行穿越。因此,您根本无法使用Python词典就无法实际检查所有键。

使用数字键的字典通常按键值进行排序。但是您可能 - 在安全的一面 - 作为订购的订单重新排列 - 您就这样做

from collections import OrderedDict
d_ordered = OrderedDict(sorted(d.items(), key =lambda i:i[0]))

然后过滤值很简单 - 它将停在上部边框

import itertools    
values = [val for k, val in 
          itertools.takewhile(lambda (k,v): k<upper, d_ordered.iteritems()) 
          if k > lower]

正如我已经说过的那样,订购字典并不是真正的必要 - 但是有些人会说这个假设是基于当前的实现,并且可能会在将来发生变化。

最新更新