在Python中,使用bis在dict列表中查找项

2024-06-06 22:17:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一份口述清单,大概是这样的:

test_data = [
    { 'offset':0, 'data':1500 },
    { 'offset':1270, 'data':120 },
    { 'offset':2117, 'data':30 },
    { 'offset':4055, 'data':30000 },
]

dict项根据'offset'数据在列表中排序。真正的数据可能要长得多。

我要做的是在给定一个特定偏移值的列表中查找一个项,该偏移值不是其中一个值,而是在该范围内。所以,我想做的是二进制搜索。

我现在知道Python^{}模块,它是一个现成的二进制搜索工具,但不能直接用于本例。我只是想知道什么是最简单的方法来适应我的需要。以下是我想到的:

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

我的问题是,这是做我想做的事情的最好方法,还是有其他更简单、更好的方法?


Tags: 数据方法testself列表datagetindex