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.