擅长:python、mysql、java
<p><code>sortedContainers</code>lib有一个<a href="http://www.grantjenks.com/docs/sortedcontainers/sorteddict.html" rel="nofollow">SortedDict</a>实现,一旦对dict进行了排序,就可以左等分查找起始位置,右等分查找最后一个位置,然后使用<a href="http://www.grantjenks.com/docs/sortedcontainers/sorteddict.html#sortedcontainers.SortedDict.d.irange" rel="nofollow">irange</a>获取范围内的键:</p>
<pre><code>from sortedcontainers import SortedDict
from operator import itemgetter
from itertools import takewhile
d = { "key1":"valA", "key123":"valB", "key1XY":"valC",
"key2":"valD", "key2-22":"valE","key3":"foo" }
key = "key2"
d = SortedDict(sorted(d.items(), key=itemgetter(0)))
start = d.bisect_left(key)
print([d[key] for key in takewhile(lambda x: x.startswith("key2"), d.irange(d.iloc[start]]))
['valD', 'valE']
</code></pre>
<p>一旦您维护了一个Sortedict,使用Sortedict会更有效:</p>
^{pr2}$