我有一个包含字典的列表,类似于这样:
test_data = [
{ 'offset':0, 'data':1500 },
{ 'offset':1270, 'data':120 },
{ 'offset':2117, 'data':30 },
{ 'offset':4055, 'data':30000 },
]
字典项目根据'offset'
数据在列表中排序。实际数据可能会更长。
我想做的是,在给定特定偏移量值的情况下查找列表中的项,该值不是正好是这些值之一,但在该范围内。因此,二分搜索是我想要做的。
我现在了解了Pythonbisect
模块,它是一个现成的二分搜索 - 很棒,但不直接适用于这种情况。 我只是想知道最简单的方法是将bisect
适应我的需求。这是我想到的:
import bisect
class dict_list_index_get_member(object):
def __init__(self, dict_list, member):
self.dict_list = dict_list
self.member = member
def __getitem__(self, index):
return self.dict_list[index][self.member]
def __len__(self):
return self.dict_list.__len__()
test_data_index_get_offset = dict_list_index_get_member(test_data, 'offset')
print bisect.bisect(test_data_index_get_offset, 1900)
它打印出:
2
我的问题是,这是否是我想要做的最佳方式,还是有其他更简单、更好的方法?