Como remapear ids para números consecutivos rapidamente

Eu tenho um arquivo csv grande com linhas que parecem

stringa,stringb
stringb,stringc
stringd,stringa

Eu preciso convertê-lo para que os IDs sejam numerados consecutivamente de 0. Nesse caso, o seguinte funcionaria

0,1
1,2
3,0

Meu código atual se parece com:

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

Infelizmente, os dicionários Python usam muita memória e minha entrada é grande.

O que posso fazer quando a entrada é muito grande para o ditado caber na memória

Eu também estaria interessado se houver uma maneira melhor / mais rápida de resolver esse problema em geral.

questionAnswers(3)

yourAnswerToTheQuestion