我需要使用数字(浮点)范围作为字典索引。考虑下面的代码:
def range_index(table, val):
for (k1, k2) in table:
if k1 < val < k2:
return table[(k1, k2)]
TIERS = {
(51, 100): 1,
(21, 50): 2,
(11, 20): 3,
(6, 10): 6,
(2, 5): 12,
(0, 1): 24
}
print(range_index(TIERS, 2.00))
products:None
但我希望它能产生:12
。如何正确地将范围作为索引?我喜欢这种元组方法,但需要他来修复
显而易见的解决办法是适当调整
val
的比较:但除此之外,您实际上是在为每个
val
遍历dict的键-在最坏的情况下是O(N)
。这与词典的目的恰恰相反。为了真正实现它,您可以将范围“展平”为共享相同值的单数键:现在,您的查找功能不仅可读性更强,而且效率更高(事实上甚至过时了……):
缺点当然是内存过多,但根据您的资源,这已经是您需要考虑的问题了
相关问题 更多 >
编程相关推荐