Я хочу сравнить, если значение одного списка существует в значении другого списка. Они огромны (50 тыс. + Элементов из базы данных).
EDIT:
Я также хочу отметить запись, которая дублируется, как duplicate = True и сохранить ее в таблице для последующего использования.
вот как списки:
n_emails=[db_id,checksum for id,checksum in search_results]
#I want to compare checksum if exist inside same list or other list and retrieve id (db_id , if exist)
#example : n_emails= [[1,'CAFEBABE010'],[2,'bfeafe3df1ds],[3,'deadbeef101'],[5,'CAFEBABE010']]
#in this case i want to retrive id 1 and 5 coz they are same checksum
for m in n_emails:
dups=_getdups(n_emails,m[1],m[0])
n_dups=[casesdb.duplicates.insert( **dup ) for dup in dups]
if n_dups:
print "Dupe Found"
casesdb(casesdb.email_data.id == m[0]).update(duplicated=True)
def _getdups(old_lst,em_md5,em_id):
dups=[]
for old in old_lst:
if em_md5==old[0] and old[1]!=em_id:
dups.append(dict(org_id=old[1],md5hash=old[0],dupID=em_id,))
return dups
Но это кажется слишком длинным и в большом списке (50k против 50k записей +). Он работал более 5000 секунд и никогда не выполнялся, кажется, бесконечный цикл?
Сервер, на котором я работаю, имеет 4 ГБ оперативной памяти и 4 ядра. Очевидно, я делаю что-то не так.
Пожалуйста, помогите .. большое спасибо!
РЕШИТЬ:
Dict Index Mapping намного быстрее! (Когда таблица mysql не проиндексирована, прошу заметить, что я не тестировал индексированную таблицу).
Его 20 секунд против 30 миллисекунд = 20 * 1000/30 = 666 раз! LOL