有没有更好的方法可以将一堆排序的迭代器合并/整理为一个迭代器,以便按排序顺序生成项?我认为下面的代码是可行的,但我觉得有一个更干净,更简洁的方法来做它,我错过了。在
def sortIters(*iterables, **kwargs):
key = kwargs.get('key', lambda x : x)
nextElems = {}
currentKey = None
for g in iterables:
try:
nextElems[g] = g.next()
k = key(nextElems[g])
if currentKey is None or k < currentKey:
currentKey = k
except StopIteration:
pass #iterator was empty
while nextElems:
minKey = None
stoppedIters = set()
for g, item in nextElems.iteritems():
k = key(item)
if k == currentKey:
yield item
try:
nextElems[g] = g.next()
except StopIteration:
stoppedIters.add(g)
minKey = k if minKey is None else min(k, minKey)
currentKey = minKey
for g in stoppedIters:
del nextElems[g]
这个用例是我有一堆csv文件,我需要根据一些排序字段合并它们。它们足够大,我不想把它们全部读入一个列表并调用sort()。我使用的是python2.6,但是如果有python3的解决方案,我还是有兴趣去看看。在
是的,您希望^{} 只做一件事;按顺序迭代排序的迭代器
相关问题 更多 >
编程相关推荐