假设我有某种类似的字典结构(或代表同一事物的其他数据结构。
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']
然而,虽然用循环编写这个函数是很简单的,但我不想做一些遍历字典中的每个值并彻底检查它的东西,但我希望它能以某种方式利用索引结构(或者甚至可以使用排序列表)以使搜索更快。
答案 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]
正如我已经说过的那样,订购词典并不是必需的 - 但是有些人会说这个假设是基于当前的实施,并且可能会在未来发生变化。