У меня есть список dicts, что-то вроде этого:В Python, найти элемент в списке dicts, используя Bisect
test_data = [
{ 'offset':0, 'data':1500 },
{ 'offset':1270, 'data':120 },
{ 'offset':2117, 'data':30 },
{ 'offset':4055, 'data':30000 },
]
Элементы Dict отсортированы в списке по данным 'offset'
. Реальные данные могут быть намного длиннее.
То, что я хочу сделать, это найти элемент в списке с заданным значением смещения, то есть не точно одно из этих значений, но в этом диапазоне. Итак, двоичный поиск - это то, что я хочу сделать.
Теперь я знаю о модуле Python bisect
, который является готовым бинарным поиском, но не может использоваться непосредственно для этого случая. Мне просто интересно, какой самый простой способ адаптировать 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
Мой вопрос, является ли это лучший способ сделать то, что я хочу, или есть какой-то другой проще, лучше?