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])
我有一个巨大的 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])