使用线程在列表中查找特定值

时间:2015-12-01 06:56:40

标签: python list enumerate

我的列表中有大量的文本数据,而我的问题是查找特定值的速度太慢。因为我必须从列表中找到50多个关键字。

这是我的工作脚本:

for num, line in enumerate(MyList):
    passList = []
    if "pass" in line:
      passList.append(line)          

    failedList = []
    if "failed" in line:
      failedlist.append(line)

    doneList = []
    if "done" in line:
      doneList.append(line)

    #.. 
    #...
    #....more and more conditions here

如果没有其他解决方案,有没有办法快速执行或使用线程。

任何建议/评论,提前谢谢..

1 个答案:

答案 0 :(得分:0)

问题是您要为每个关键字对每行进行一次完整扫描。您想在一次扫描中找到匹配项。正则表达式将更有效地做到这一点。只需构建一个包含所有密钥并与之匹配的正则表达式模式:

keys = ('foo', 'bar', 'stat', 'key', 'abcd', 'efgh', '$')
pattern = re.compile("(%s)" % "|".join(keys))

data = [
    'this is foo',
    'this is bar',
    'this is abcd',
    'this is efgh',
    'this is no match'
]

results = defaultdict(list)
for string in data:
    match = pattern.search(string)
    results[match.group(1)].append(string)

print results