KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I have a list of dicts, something like this: test_data = [ { 'offset':0, 'data':1500 }, { 'offset':1270, 'data':120 }, { 'offset':2117, 'data':30 }, { 'offset':4055, 'data':30000 }, ] The dict items are sorted in the list according to the 'offset' data. The real data could be much longer. What I want to do is lookup an item in the list given a particular offset value, which is not exactly one of those values, but in that range. So, a binary search is what I want to do. I am now aware of the Python bisect module, which is a ready-made binary search—great, but not directly usable for this case. I'm just wondering what is the easiest way to adapt bisect to my needs. Here is what I came up with: 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) It prints: 2 My question is, is this the best way to do what I want, or is there some other simpler, better way?
Tags (comma-separated)
Save Edits
Cancel