Rendimento de iteradores classificados na ordem classificada em Pytho
Existe uma maneira melhor de mesclar / agrupar um monte de iteradores classificados em um para que produza os itens na ordem classificada? Acho que o código abaixo funciona, mas sinto que há uma maneira mais limpa e concisa de fazer isso do que estou sentindo falt
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]
O caso de uso para isso é que tenho um monte de arquivos csv que preciso mesclar de acordo com algum campo classificado. Eles são grandes o suficiente para que eu não queira apenas lê-los todos em uma lista e chamar sort (). Estou usando python2.6, mas se houver uma solução para python3, eu ainda estaria interessado em vê-lo.