Cómo reasignar identificadores a números consecutivos rápidamente

Tengo un gran archivo csv con líneas que se ve como

stringa,stringb
stringb,stringc
stringd,stringa

Necesito convertirlo para que los identificadores se numeren consecutivamente desde 0. En este caso, lo siguiente funcionaría

0,1
1,2
3,0

Mi código actual se ve así:

import csv
names = {}
counter = 0
with open('foo.csv', 'rb') as csvfile:
     reader = csv.reader(csvfile)
     for row in reader:
         if row[0] in names:
             id1 =  row[0]
         else:
             names[row[0]] = counter
             id1 = counter
             counter += 1
         if row[1] in names:
             id2 = row[1]
         else:
             names[row[1]] = counter
             id2 = counter
             counter += 1
     print id1, id2

Los dictos de Python usan mucha memoria tristemente y mi entrada es grande.

¿Qué puedo hacer cuando la entrada es demasiado grande para que el dict quepa en la memoria?

También me interesaría si hay una manera mejor / más rápida de resolver este problema en general.

Respuestas a la pregunta(3)

Su respuesta a la pregunta