如何在Python中创建带有噪波的查找表?
假设我有一本Python词典如何在Python中创建带有噪波的查找表?,python,lookup-tables,Python,Lookup Tables,假设我有一本Python词典{1:'a',100:'b',1024:'c'} 我想构建一个函数,它不仅可以查找键的精确值,还可以查找近似值。例如,如果输入为99或101,函数可以返回b 你能给我推荐一些方法吗?如果你有一个预先知道的键值的有限范围,比如元组索引 >>> d={(0,2):'a', (99,101):'b', (1023,1025):'c'} 要查找键的值,请执行以下操作: 查找1024.01: >>> d={(0,2):'a', (99,10
{1:'a',100:'b',1024:'c'}
我想构建一个函数,它不仅可以查找键的精确值,还可以查找近似值。例如,如果输入为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'
如果预先知道键的值有一个有限的范围,比如元组索引
>>> 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'
您可以按如下方式创建自己的查找功能:
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'})
导入系统
def查找(值、dict):
最近值=sys.maxint
result=“”
对于dict.iteritems()中的k,v:
如果abs(值-k)<最近值:
最近值=绝对值(值-k)
结果=v
返回结果
打印查找(101,{1:'a',100:'b',1024:'c'})
您可以按如下方式创建自己的查找功能:
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'})
导入系统
def查找(值、dict):
最近值=sys.maxint
result=“”
对于dict.iteritems()中的k,v:
如果abs(值-k)<最近值:
最近值=绝对值(值-k)
结果=v
返回结果
打印查找(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']
data={1:'a',100:'b',1024:'c'}
def get_近似值(数据、钥匙):
返回[elem[1]表示数据中的元素。iteritems()如果elem[0]*0.98您可以使用以下内容搜索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']
data={1:'a',100:'b',1024:'c'}
def get_近似值(数据、钥匙):
返回[elem[1]表示数据中的元素。iteritems()如果elem[0]*0.98如果您想保持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'}
当您想检查某个值是否接近数据中的某个键时,只需应用相同的转换:
>>> 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'
如果您想保持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'}
当您想检查某个值是否接近数据中的某个键时,只需应用相同的转换:
>>> 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'
好的解决方案通常取决于您的具体问题。如果fuzzdict不能满足您的要求,您可以提供更多具体的细节吗?例如,类似的内容通常用于字符串(模糊搜索)或图片(接近重复检测)。您好,我将期待fuzzydict@Tiế乌斯ủy定义“近似值”。好的解决方案通常取决于您的具体问题。如果fuzzdict不满足您的要求,您可以提供更具体的细节吗?例如,类似的内容通常用于字符串(模糊搜索)或图片(接近重复检测)。您好,我将fuzzydict@Tiế乌斯ủy定义“近似值”。谢谢。如果数字是浮点数,而不是整数,你的解决方案如何工作?谢谢。如果数字是浮点数,而不是整数,你的解决方案如何工作?