字典以范围为键

9
在Python中,我如何将一系列值映射到一个具体的值?基本上,我想要一个字典,我可以用范围填充,并用数字索引:
rd = rangedict()
rd[(0, 10)] = 5
print rd[4] # prints 5
print rd[6] # prints 5
rd[(5, 15)] = 20
print rd[4] # prints 5
print rd[6] # prints 20

2
使用“interval”而不是“range”进行快速谷歌搜索,可以得到 https://code.google.com/p/intervalmap/ 和 http://joshuakugler.com/archives/30-BetweenDict,-a-Python-dict-for-value-ranges.html。 - Martijn Pieters
1
这个问题以其当前的形式,在stackoverflow上似乎不属于离题。 - user4815162342
1
“prints 4” 的意思是 “prints 5” 吗? - Mark Dickinson
@MartijnPieters 感谢您重新开放。同意问题可以更好 - 例如,它未通过“您尝试了什么”测试。但它绝对不是SO上的“离题”。此外,我认为原始Java库的引用没有任何问题。它并不意味着问题本身正在寻求工具建议,它只是澄清了意图。对于所有OP而言,Python的电池包含在标准库中可能会支持等效功能。 - user4815162342
2
@knub:在这种情况下,不要将哈希称为“高效”,因为最适合您目的的数据结构很可能是区间树或线段树。 - Michael Foukarakis
显示剩余6条评论
2个回答

3

0
感谢评论,我找到了一个使用 intervaltree 包的解决方案。
from intervaltree import IntervalTree

tree = IntervalTree()
tree.addi(0, 10, 5)
print tree[4]
print tree[6]

# need to chop before, as the library stores both intervals otherwise
tree.chop(5, 15)
tree.addi(5, 15, 20)
print tree[4]
print tree[6]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接