id(整数)を数値(double)にマップする辞書構造があります。数字は実際にはアイテムの重量です。
指定された重みの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 / elegativeな方法は、カスタム関数を関数に渡すようなことをすることだと思いmin
ます-それが可能かどうかはわかりません...
[[アップデート]]
Python2.6.5を実行しています