¿Rendiendo de iteradores ordenados en orden ordenado en Python?

¿Hay una mejor manera de fusionar / cotejar un grupo de iteradores ordenados en uno para que produzca los elementos en orden ordenado? Creo que el siguiente código funciona, pero siento que hay una forma más limpia y concisa de hacerlo que me falta.

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]

El caso de uso para esto es que tengo un montón de archivos csv que necesito fusionar de acuerdo con algún campo ordenado. Son lo suficientemente grandes como para que no quiera leerlos todos en una lista y llamar a sort (). Estoy usando python2.6, pero si hay una solución para python3, todavía estaría interesado en verla.

Respuestas a la pregunta(1)

Su respuesta a la pregunta