【问题标题】:Finding specific value in list using threading使用线程在列表中查找特定值
【发布时间】:2015-12-01 06:56:40
【问题描述】:

我的列表中有大量文本数据,我的问题是查找特定值太慢。因为我必须从列表中找到 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

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

任何建议/cmets,在此先感谢..

【问题讨论】:

  • 您为什么不解析该行并检查您要查找的单词是否在确切位置?请同时显示该行的格式。
  • 你能用grep吗?它肯定更快。
  • @thefourtheye,是的,我正在找到那个确切的值,现在我只是使用那个虚拟字符串来查找,但实际上在我的 if 条件下它也在列表中。
  • @fiacre 对不起,我只是一个初学者,我还不熟悉那个 grep。
  • 对不起。没有看到建议优化的行的格式是非常困难的。

标签: python list enumerate


【解决方案1】:

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

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

【讨论】:

  • 我明白了你的意思,但现在我正在尝试分析当我从列表中找到 50 多个特定关键字时是否会很快。
  • 和?我很想看看结果。我怀疑你会有所改善。不过,改进的幅度将取决于您的数据和密钥的性质。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-29
  • 1970-01-01
  • 1970-01-01
  • 2017-11-12
  • 2018-08-05
  • 1970-01-01
  • 2013-04-07
相关资源
最近更新 更多