迭代 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 开始,没有。理由有两个:
- 查找就是这么该死fast。
- 在实现中,
SortedDict
直接继承自dict
。因此,值本身存储在 dict
中,SortedDict
无法获取它们,只能自己进行查找。
如果我们添加一个 isliceitems
方法,它会像您一样做。
你可以试试:
lookup = dict.__getitem__
print [k, lookup(d, k) for k in in d.islice(1, 4)]
但我希望这不会更快。
我想在 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 开始,没有。理由有两个:
- 查找就是这么该死fast。
- 在实现中,
SortedDict
直接继承自dict
。因此,值本身存储在dict
中,SortedDict
无法获取它们,只能自己进行查找。
如果我们添加一个 isliceitems
方法,它会像您一样做。
你可以试试:
lookup = dict.__getitem__
print [k, lookup(d, k) for k in in d.islice(1, 4)]
但我希望这不会更快。