迭代 SortedDict 中的项目片段?

Iterate over a slice of items in a SortedDict?

我想在 sortedcontainers SortedDict 中迭代 items 的一片。我知道我可以做这样的事情:

from sortedcontainers import SortedDict

d = SortedDict(b=20, d=30, c=10, e=50, a=40)

print [k, d[k] for k in in d.islice(1, 4)]
>> [('b', 20), ('c', 10), ('d', 30)]

但我想尽可能避免所有单独的 d[k] 查找;像 d.iteritems() 这样的东西允许切片:

for k, v in d.islice_items(1, 4):
    print k, v

有什么方法可以迭代 SortedDict 中的项目片段?

...我想出了怎么做。在询问之前应该检查 itertools :/

import sortedcontainers
import itertools

d = sortedcontainers.SortedDict(b=20, d=30, c=10, e=50, a=40)

print [(k, d[k]) for k in d.islice(1, 4)]
# outputs: [('b', 20), ('c', 10), ('d', 30)]

print [i for i in itertools.islice(d.iteritems(), 1, 4)]
# outputs: [('b', 20), ('c', 10), ('d', 30)]

itertools.islice 成功了。

从 v1.4.3 开始,没有。理由有两个:

  1. 查找就是这么该死fast
  2. 在实现中,SortedDict直接继承自dict。因此,值本身存储在 dict 中,SortedDict 无法获取它们,只能自己进行查找。

如果我们添加一个 isliceitems 方法,它会像您一样做。

你可以试试:

lookup = dict.__getitem__
print [k, lookup(d, k) for k in in d.islice(1, 4)]

但我希望这不会更快。