为什么我的程序需要这么长时间?

时间:2016-05-20 02:56:08

标签: python

我正在处理一个大的txt文件,总共有8050000行。这些行的简短例子是:

usedfor zipper fasten_coat
usedfor zipper fasten_jacket
usedfor zipper fasten_pant
usedfor your_foot walk
atlocation camera cupboard
atlocation camera drawer
atlocation camera house
relatedto more plenty

我编写了一个python代码来读取行,并将它们存储为字典。我的代码是:

dicCSK = {} 
for line in finCSK:
    line=line.strip('\n')
    try:
        r, c1, c2 = line.split(" ")
    except ValueError: print line
    if c1 not in dicCSK.keys():
        dicCSK[c1]= []
    str1 = r+" "+c2
    dicCSK[c1].append(str1)

但是,我运行该程序超过20个小时,它仍在运行。那么有没有更好的方法将它们存储在字典中?我的代码太慢了。感谢。

1 个答案:

答案 0 :(得分:5)

这是一个错误:它会生成字典中所有键的列表,然后扫描它。

if c1 not in dicCSK.keys():
    dicCSK[c1]= []

相反:

if c1 not in dicCSK:
    dicCSK[c1] = []

或者使用defaultdict来避免检查。

dicCSK = collections.defaultdict(list)
for line in finCSK:
    line=line.strip('\n')
    try:
        r, c1, c2 = line.split(" ")
    except ValueError:
        print line
    dicCSK[c1].append(r+" "+c2)

此外,您可能还希望在dicCSK[c1].append(r+" "+c2)的{​​{1}}子句下使用else语句,否则即使存在try/except例外,它也会执行。