ho una lista di dicts, qualcosa di simile:In Python, trovano voce nella lista delle dicts, utilizzando bisect
test_data = [
{ 'offset':0, 'data':1500 },
{ 'offset':1270, 'data':120 },
{ 'offset':2117, 'data':30 },
{ 'offset':4055, 'data':30000 },
]
Le voci dict sono ordinati nella lista in base ai dati 'offset'
. I dati reali potrebbero essere molto più lunghi.
Quello che voglio fare è cercare un articolo nell'elenco dato un particolare valore di offset, che è non esattamente uno di quei valori, ma in quell'intervallo. Quindi, una ricerca binaria è ciò che voglio fare.
Sono al corrente del modulo Python bisect
, che è una ricerca binaria già pronta, ma non direttamente utilizzabile per questo caso. Mi sto solo chiedendo quale sia il modo più semplice per adattare bisect
alle mie esigenze. Ecco quello che mi si avvicinò con:
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)
Esso stampa:
2
La mia domanda è, è questo il modo migliore per fare quello che voglio, o c'è qualche altro modo più semplice, migliore?