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