說我有一本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 –