假设我有某种类似的字典结构(或代表同一件事的其他数据结构。
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]
正如我已经说过的那样,订购字典并不是真正的必要 - 但是有些人会说这个假设是基于当前的实现,并且可能会在将来发生变化。