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

python fastest way to match strings with huge data size

我有一个巨大的 table 数据(或记录数组),其元素为:

tbdata[i]['a'], tbdata[i]['b'], tbdata[i]['c']

都是整数,i是0到100万之间的运行dom数(table的大小)。

我还有一个列表叫Name,它的元素都是文件名(一共900个名字),比如'/Users/Desktop/Data/spe-3588-55184-0228.jpg'(修改),都是三个数字。

现在我想select我的tbdata中的那些数据,其上面提到的元素都与列表名称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])