迭代SortedDict中的一片项目?

时间:2015-12-04 23:39:27

标签: python sorteddictionary

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

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中的一片项?

2 个答案:

答案 0 :(得分:3)

从v1.4.3开始,没有。理由是双重的:

  1. 查询只是fast。{/ li>
  2. 在实施过程中,SortedDict直接从dict继承。因此,值本身存储在dict中,SortedDict无法获取它们而不是查找本身。
  3. 如果我们添加isliceitems方法,它会像您一样做。

    您可以尝试:

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

    但我希望这不会更快。

答案 1 :(得分:0)

......我想出了怎么做。在询问之前应该检查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可以解决问题。