Я не мог отпустить это и наткнулся на то, что я считаю победителем.
При тестировании было ясно, что цикл по строкам csv.DictReader
был самой медленной частью;Примерно 30 из 40 секунд.
Я переключил его на простой csv.reader
, чтобы посмотреть, что я получу.Это привело к строкам списков.Я обернул это в dict
, чтобы увидеть, конвертировалось ли оно напрямую.Это было!
Тогда я мог бы перебирать собственный словарь вместо csv.DictReader
.
Результат ... с 4 миллионами строк за 3 секунды !101
def convert_counter_like_csv_to_counter(file_to_convert):
with file_to_convert.open(encoding="utf-8") as f:
csv_reader = csv.reader(f, delimiter="\t")
d = dict(csv_reader)
the_counter = Counter({phrase: int(float(count)) for count, phrase in d.items()})
return the_counter