我有一个字典结构,可以将 id(整数)映射为数字(双精度)。这些数字实际上是物品的重量。
我正在编写一个函数,它允许我获取给定权重的 id(如果在 dict 中找到权重,否则,它将返回下一个最接近(即最接近的匹配)权重的id。
这是我到目前为止所拥有的:
def getBucketIdByValue(bucketed_items_dict, value):
sorted_keys = sorted(bucketed_items_dict.keys())
threshold = abs(bucketed_items_dict[sorted_keys[-2]] -bucketed_items_dict[sorted_keys[-1]]) # determine gap size between numbers
# create a small dict containing likely candidates
temp = dict([(x - value),x] for x in bucketed_items_dict.values() if abs(x - value) <= threshold)
print 'DEBUG: Deviations list: ', temp.keys()
smallest_deviation = min(temp.keys()) if value >= 0 else max(temp.keys()) # Not sure about this ?
smallest_deviation_key = temp[smallest_deviation]
print 'DEBUG: found bucketed item key:',smallest_deviation_key
return smallest_deviation_key
我不确定逻辑是否正确(尤其是我获得最小偏差的地方)。无论如何,即使逻辑是正确的,这似乎也是一种过于复杂的做事方式。有没有更优雅/pythonic的方式来做到这一点?
在我的脑海中,我认为一种更 Pythonic/优雅的方式是做一些事情,比如将自定义函数传递给min
函数 - 不知道这是否可能......
[[更新]]
我正在运行 Python 2.6.5