搜索时间"x in []"vs"x in {}"

Dog*_*rld 1 python optimization search python-2.2

我遇到了一个问题,我必须通过代理日志来查看用户是否访问过网站列表.

我写了一个小脚本来读取所有代理日志,将访问过的主机与列表进行匹配:

for proxyfile in proxyfiles:
    for line in proxyfile.readlines():
        if line[4] in hosts_list:
            print line
Run Code Online (Sandbox Code Playgroud)

hosts_file很大,我们说的是~10000个主机,我注意到搜索时间比预期的要长.

我写了一个小测试:

import random, time
test_list = [x for x in range(10000)]
test_dict = dict(zip(test_list, [True for x in range(10000)]))

def test(test_obj):
 s_time = time.time()
 for i in range(10000):
  random.randint(0,10000) in test_obj
 d_time = time.time() - s_time
 return d_time

print "list:", test(test_list)
print "dict:",test(test_dict)
Run Code Online (Sandbox Code Playgroud)

结果如下:

list: 5.58524107933
dict: 0.195574045181
Run Code Online (Sandbox Code Playgroud)

所以,对我的问题.是否可以以更方便的方式执行此搜索?创建列表的字典似乎是一个黑客,因为我想搜索它们的键而不是它包含的值.

ddz*_*lak 5

"因为我想搜索它们的密钥,而不是它包含的值" =>然后才使用set

  • 集合的底层实现基本上是一个只有键而没有值的字典.在Python 2.2上,只需使用字典. (6认同)