【发布时间】:2010-11-23 13:52:59
【问题描述】:
我有一个字典列表,如下所示:
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
我的问题是,这是做我想做的最好的方式,还是有其他更简单、更好的方式?
【问题讨论】:
标签: python dictionary binary-search