我需要从一个大约有300万个项目的列表中构建字典,现在我正在使用下面的代码,但是它运行了12个小时以上,但仍然没有完成。我想知道是否有更快的方法? 这是我现在正在使用的代码:
my_dict = {i:obj_id.count(i) for i in obj_id}
答案 0 :(得分:0)
您的代码运行速度如此之慢的原因是,它需要O(N)的时间复杂度来找到计数,然后又需要O(N)的时间来填充字典。解决方案是遍历该列表,如果之前不存在键,则添加键obj和值1。如果确实如此,则只需增加该值即可。这将减少一些复杂性,因为访问和修改字典的时间为0(1)。
my_dict = {}
for obj in obj_id{
if obj in my_dict{
my_dict[obj] += 1
}
else{
my_dict[obj] = 1
}
}