Python 用于根据范围内的键查找值的数据结构

Python 用于根据范围内的键查找值的数据结构,python,data-structures,Python,Data Structures,我正在寻找一个字典的替代品,它可以让我有效地使用范围作为键。大概需要对数据结构进行排序-可能类似于b树?我还没有找到一个好的python实现 例如,给定以下类似字典的数据结构: d={'38.1003827193':'value1','58.29932891733':'value2'} 搜索范围38->38.337应返回value1我不确定为什么键保留为字符串,但标准库中的模块可以帮助您在排序索引中进行二进制搜索。多维索引是另一章,主要问题是如何使用数据;例如,对于插入或特定分布,树可能更快 不

我正在寻找一个字典的替代品,它可以让我有效地使用范围作为键。大概需要对数据结构进行排序-可能类似于b树?我还没有找到一个好的python实现

例如,给定以下类似字典的数据结构:

d={'38.1003827193':'value1','58.29932891733':'value2'}


搜索范围
38->38.337
应返回
value1

我不确定为什么键保留为字符串,但标准库中的模块可以帮助您在排序索引中进行二进制搜索。多维索引是另一章,主要问题是如何使用数据;例如,对于插入或特定分布,树可能更快

不确定这是否是你的意思,但我认为这就是你的意思:

d = {'38.1003827193': 'value1', '58.29932891733': 'value2'}
d_keys = list(d.keys())

bound_names = ["lower bound", "upper bound"]
bounds = []
for i in range (0, 2):
    while True:
        try:
            bound = float(input("Enter the {} number: ".format(bound_names[i])))
        except ValueError:
            print("Number not entered.")
            continue
        else:
            break
    bounds.append(bound)

for n in range(len(d_keys)):
    if bounds[0] <= d_keys[n] <= bounds[1]:
        print(d[d_keys[n]])
当输入37(下限)和39(上限)时,代码打印:
value1
,但当输入38作为上限
value1
时,不打印

如果不想打印,可以让它返回该数字的所有值的列表。
您所要做的就是将
打印(d[d_键[n]])
更改为
范围内的数字。追加(d[d_键[n]])
并在上面某处添加
范围内的数字=[]

集合。OrderedDict
在Python 3中的OrderedDict
)提供一个字典,用于按键插入的顺序维护键的顺序。您可能可以使用范围访问方法在此基础上进行构建。您希望数据结构有多大?键是整数还是其他基本数据类型的字符串?dict键应该是ranges,还是只想使用ranges进行搜索?字典可能有10万个条目。键是一个字符串,包含两个用逗号分隔的浮点数(例如“23.29382398,84.2390230”)。这些范围只是为了搜索。感谢您的帮助。通过执行以下操作,可以高效地(?)搜索您显示的词典:[y代表x,y代表d.items(),如果float(x)>=38.0且float(x)<39.0]。需要用公式中的变量数据替换范围值。您是否正在寻找类似的值?
d = {'38.1003827193': 'value1', '58.29932891733': 'value2'}    
d_keys = list(d.keys())

bound_names = [["lower bound", "inclusive"], ["upper bound", "exclusive"]]
bounds = []
for n in range(0, 2):
    while True:
        try:
            number_to_search = int(input("Enter {} number ({}): ".format(bound_names[n][0], bound_names[n][1])))
        except ValueError:
            print("Integer not entered.")
            continue
        else:
            break
    bounds.append(number_to_search)

for n in range(len(d_keys)):
    if int(d_keys[n]) in range(bounds[0], bounds[1]):
        print(d[d_keys[n]])