Python浮点范围作为字典索引

2024-09-26 18:11:44 发布

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

我需要使用数字(浮点)范围作为字典索引。考虑下面的代码:

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。如何正确地将范围作为索引?我喜欢这种元组方法,但需要他来修复


Tags: 代码inforindexif字典deftable
1条回答
网友
1楼 · 发布于 2024-09-26 18:11:44

显而易见的解决办法是适当调整val的比较:

if k1 <= val < k2:

但除此之外,您实际上是在为每个val遍历dict的键-在最坏的情况下是O(N)。这与词典的目的恰恰相反。为了真正实现它,您可以将范围“展平”为共享相同值的单数键:

NEW_TIERS = {k:v for tup,v in TIERS.items() for k in range(tup[0], tup[1]+1)}

现在,您的查找功能不仅可读性更强,而且效率更高(事实上甚至过时了……):

def range_index(table, val):
    return table.get(int(val))

缺点当然是内存过多,但根据您的资源,这已经是您需要考虑的问题了

相关问题 更多 >

    热门问题