我正在处理一个大的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个小时,它仍在运行。那么有没有更好的方法将它们存储在字典中?我的代码太慢了。感谢。
答案 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
例外,它也会执行。