我有大型csv文件(大约15e6行)。
每一行都是这样的:id_user | id_software。
我的目标是构建一个字典,其键是2个区分软件的元组,其值是这两个软件安装在同一台计算机上的概率(计算机= id_user)。
第一步是阅读csv文件并构建一个字典,其密钥是用户ID,其值是包含用户计算机上安装的所有软件的元组。
第二步是创建阅读第一个字典的最终字典。
我的问题是,csv文件的第一个5e5 lignes产生了1GB字典(我使用heapy来分析我的算法)。
有什么想法可以帮我解决这个问题吗?
以下是代码:
import csv
import itertools
dict_apparition={}
dict_prob_jointe={}
nb_user=0
with open('discovery_requests_id.csv','rU') as f:
f=csv.reader(f)
f.next()
for row in f:
a=int(row[1])
b=int(row[0])
try:
if not a in dict_apparition[b]:
dict_apparition[b]+=(a,)
except:
dict_apparition[b]=(a,)
nb_user+=1
for key1 in dict_apparition.keys():
l=itertools.combinations(dict_apparition[key1],2)
for item in l:
try:
dict_prob_jointe[item]+=1.0/nb_user
except:
dict_prob_jointe[item]=1.0/nb_user
return dict_prob_jointe
Thansks!