[英]python fastest way to match strings with huge data size
我有一個包含元素的巨大表數據(或記錄數組):
tbdata[i]['a'], tbdata[i]['b'], tbdata[i]['c']
它們都是整數,並且i
是0到1百萬之間的隨機數(表的大小)。
我還有一個名為Name
的列表,其元素均為文件的所有名稱(總共900個名稱),例如'/Users/Desktop/Data/spe-3588-55184-0228.jpg'
(已修改),均包含三個數字。
現在,我想從我的tbdata
選擇那些上面提到的元素都與List Name
中的三個數字匹配的數據。 這是我最初編寫的代碼:
Data = []
for k in range(0, len(tbdata)):
for i in range(0, len(NameA5)):
if Name[i][43:47] == str(tbdata[k]['a']) and\
Name[i][48:53] == str(tbdata[k]['b']) and\
Name[i][55:58] == str(tbdata[k]['c']):
Data.append(tbdata[k])
Python運行了一整夜,但仍未完成,因為數據量巨大或我的算法太慢了……我想知道完成此任務的最快方法是什么? 謝謝!
您可以像這樣構造查找樹:
a2b2c = {}
for name in NameA5:
a = int(name[43:47])
b = int(name[48:53])
c = int(name[55:58])
if a not in a2b2c2name:
a2b2c2name[a] = {}
if b not in a2b2c2name[a]:
a2b2c2name[a][b] = {}
a2b2c2name[a][b][c] = True
for k in range(len(tbdata)):
a = tbdata[k]['a']
b = tbdata[k]['b']
c = tbdata[k]['c']
if a in a2b2c2name and b in a2b2c2name[a] and c in a2b2c2name[a][b]:
Data.append(tbdata[k])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.