我有一个包含元素的大型表数据(或记录数组):
tbdata[i]['a'], tbdata[i]['b'], tbdata[i]['c']
都是整数,i
是0到100万之间的随机数(表的大小)。
我还有一个名为Name
的列表,其元素都是文件的名称(总共900个名称),例如'/Users/Desktop/Data/spe-3588-55184-0228.jpg'
(已修改),都包含三个数字。
现在我想从我的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整夜运行但仍未完成,因为数据大小很大或我的算法太慢......我想知道完成这项任务的最快方法是什么?谢谢!
答案 0 :(得分:1)
您可以构建一个这样的查找树:
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])