我想比較一個列表的值是否存在於其他列表的值中。它們是巨大的(來自數據庫的50k +項目)。比較python中Gigant Two Dimen列表中的一個列表的值,最快的方法是什麼?
編輯:
我也想標記,是複製爲複製=真記錄並保存在表中供以後refrence。
這裏列出瞭如何:
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 VS 50K記錄+),它跑了超過5000秒,從來沒有做過,似乎永無止境的循環? 我運行的服務器有4 GB的ram和4個內核。顯然我做錯了什麼。
請幫助..非常感謝!
解決:
快譯通指數映射方法是快了很多! (當mysql表未被索引時,請注意我沒有對索引表進行測試)。
它的20秒對30毫秒= 20 * 1000/30 = 666次! LOL
是否有理由不想通過數據庫查詢在代碼中執行此操作? – 2010-12-01 00:01:53
你想刪除重複的值嗎?因爲如果你提出最終的要求,應該有更有效的方法。 – Kabie 2010-12-01 00:21:12
我想要做的是獲取重複條目,並建立一張表格來保存它們,稍後會對其進行介紹。可以說,當用戶瀏覽記錄時,他/她將顯示重複條目列表,因此他/她也可以檢查它們(或跳過它們)。 Mysql的不同將消除重複的權利? – 2010-12-01 00:26:37