说我有一本Python字典{1:'a', 100:'b', 1024:'c'}
如何在Python中使用噪声创建查找表?
我想要构建一个函数,它不仅可以查找该键的确切值,还可以查找近似值。例如,如果输入为99或101,该函数可以返回b
。
您能否给我建议一些方法?
说我有一本Python字典{1:'a', 100:'b', 1024:'c'}
如何在Python中使用噪声创建查找表?
我想要构建一个函数,它不仅可以查找该键的确切值,还可以查找近似值。例如,如果输入为99或101,该函数可以返回b
。
您能否给我建议一些方法?
如果你有一个有限的范围是预先已知的东西像这样的索引与元组
>>> d={(0,2):'a', (99,101):'b', (1023,1025):'c'}
该键的值要查找键的值:
查找1024.01:
>>> d={(0,2):'a', (99,101):'b', (1023,1025):'c'}
>>> next(v for (k,v) in d.iteritems() if k[0]<=1024.01<=k[1])
'c'
查找1025.01
:
>>> next(v for (k,v) in d.iteritems() if k[0]<=1025.01<=k[1])
# throws an error because key is not found
谢谢。如果数字是浮点数,而不是整数,你的解决方案如何工作? –
@TiếuThủy好点!我更新了答案 – user2314737
你可以使自己的查找功能如下:
import sys
def lookup(value, dict):
nearest = sys.maxint
result = ""
for k,v in dict.iteritems():
if abs(value - k) < nearest:
nearest = abs(value - k)
result = v
return result
print lookup(101, {1:'a', 100:'b', 1024:'c'})
你可以用这样的2%范围内(可配置)内的值进行搜索:
data = {1:'a', 100:'b', 1024:'c'}
def get_approx(data, key):
return [elem[1] for elem in data.iteritems() if elem[0]*0.98 <= key <= elem[0]*1.02]
get_approx(data, 99) # outputs ['b']
如果你想保留速度优势的dict
,你可以把你的钥匙,例如他们四舍五入到10的最近倍数:
>>> data = {1:'a', 100:'b', 1024:'c'}
>>> fuzzy = { ((k + 5) // 10) * 10:v for k,v in data.items() }
>>> fuzzy
{0: 'a', 100: 'b', 1020: 'c'}
当您想检查一个值是接近data
一个键,就简单地套用相同的变换:
>>> fuzzy.get(((98+5)//10)*10)
'b'
>>> fuzzy.get(((97+5)//10)*10)
'b'
>>> fuzzy.get(((100+5)//10)*10)
'b'
>>> fuzzy.get(((101+5)//10)*10)
'b'
>>> fuzzy.get(((1022+5)//10)*10)
'c'
https://开头pypi.python.org/pypi/fuzzydict/0.0.1 –
好的解决方案通常取决于您的具体问题。如果fuzzdict不满足你可以给你更具体的细节?例如。类似的东西通常用于字符串(模糊搜索)或图片(接近重复检测)。 – syntonym
嗨,我会看看fuzzydict –