我想在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中的一片项?
答案 0 :(得分:3)
从v1.4.3开始,没有。理由是双重的:
SortedDict
直接从dict
继承。因此,值本身存储在dict
中,SortedDict
无法获取它们而不是查找本身。如果我们添加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
可以解决问题。