python字典浮点搜索范围内

时间:2012-10-24 15:46:56

标签: python search

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

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']

然而,虽然用循环编写这个函数是很简单的,但我不想做一些遍历字典中的每个值并彻底检查它的东西,但我希望它能以某种方式利用索引结构(或者甚至可以使用排序列表)以使搜索更快。

3 个答案:

答案 0 :(得分:3)

Dictionary是一种错误的数据结构。写一个搜索树。

答案 1 :(得分:0)

Python字典是一个hashmap实现。其密钥无法在搜索树中进行比较和遍历。所以你根本不能使用python字典而不实际检查所有键。

答案 2 :(得分:0)

带有数字键的词典通常按键值排序。但你可以 - 为了安全起见 - 将其重新排列为OrderedDictionary - 你只需要做一次

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]

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