簡體   English   中英

python匹配具有巨大數據量的字符串的最快方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM