1) Ну. Как бы я делал. Наверное
проще загрузить это в SQLite и проиндексировать. Как то так.
file.csv
id;name;phone;price
1;Игорь;79287777777;20
2; Дмитрий;79287777888;25
...
В базе
sqlite> create table tab1(id text,name text,phone text,price text);
sqlite> .mode csv
sqlite> .separator ";"
sqlite> .headers off
sqlite> .import file.csv tab1
Это одноразовая операция и ее можно сделать вручную.
Желательно создать композитный индекс по 2 полям
sqlite> create index idx1 on tab1(name,price);
А дальше из python подключиться к SQLite и гонять запросы вида
SELECT * from tab1 WHER name='Игорь' AND price='20'
2) Можно еще придумать сценарий
с загрузкой таблицы в Python dictionary но это наверное
увеличит нагрузку на память. Может вместо 2Гб будет 10Гб. Who knows! Вобщем это повод для
экспериментов с замером памяти. Кроме того dictionary жестко нас привяжет к полям name + price
и это будет неудобно.