Ben bu durumda bu nedenle kimlikleri ardışık 0'dan numaralandırılmıştır dönüştürmek gerekir ardışık sayılara kimlikleri yeniden eşleştirmek için ne kadar çabuk
stringa,stringb
stringb,stringc
stringd,stringa
benziyor hatları ile büyük bir csv dosyası var çalışacak aşağıdaki Python dicts ne yazık ki çok fazla bellek kullanmak
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
: gibi
0,1
1,2
3,0
Bulunduğum kod görünüyor ve girdim büyük. dict belleğine
genel olarak bu sorunu çözmek için daha iyi/hızlı bir yolu var olup olmadığını da ilgi olacağını sığacak şekilde alanındaki giriş çok büyük olduğunda
ne yapabilirim. GÜNCELLEME
Bir sözlük/karma haritası kullanma genel stratejisi doğrudur, ancak biraz garip davranıyorsunuz. Girişinizin belleğe sığmayacak kadar büyük olduğunu söylediğinizde, burada ne konuşuyoruz? Bazı arama tabloları (dict) veya diğer yetkili referanslar olmadan, benzersizliği veya ardışıklığı garanti edemezsiniz. –
@NathanielFord Başlamak için daha az garip bir yolu bilmek isterim. – eleanora
Ardından, derhal verdiğiniz örnekte verdiğiniz çıktıdan 0,1,2,3 vb. –