用于搜索和删除项目的字典性能

时间:2017-01-06 12:29:53

标签: python performance dictionary

我的Python字典性能有问题。

我必须读取一个包含许多x,y位置的文件,如果这样绘制它 看起来像一个圆圈,我必须通过一个特定的数字来调整这个圆圈的大小 边缘。如果Mydict有超过50000个项目,它会变慢。

Mydict就像{ (X,Y) : {value:1 ,value:2} ,}
Key是一个元组,值是另一个dict。

Mydict = get_data()
cut_num = 5 # cut size
# start remove x
max_group = tuple(map(max,*Mydict))
min_group = tuple(map(min,*Mydict))
X_max = max_group[0] - cut_num
X_min = min_group[0] + cut_num

remove_keys =[k for k in Mydict if k[0]> X_max or k[0]< X_min ]
for key in remove_keys:
    del Mydict[key]

删除X值的速度大约只需1秒。

但我不知道如何以效率方式删除Y值。

我写了一个函数来得到Y Max,Min By X值:

def Get_Y_By_Xaxis(Mydict,X_value):
    temp_dict = {k for k in Mydict if k[0] == X_value }
    max_group = tuple(map(max,*temp_dict ))
    min_group = tuple(map(min,*temp_dict ))
    return (min_group[1],max_group[1])

然后开始删除Y值。我是这样做的

for i in range(X_min ,X_max+1 ):
    limits = Get_Y_By_Xaxis(Mydict , i)
    remove_keys =[k for k in Mydict
                  if (k[0] == i and k[1] > limits[0] - cut_num  )
                  or (k[0] == i and k[1] < limits[1] + cut_num  )]
    for key in remove_keys:
        del Mydict[key]

对于具有150000项

的字典,将花费大约60~70秒

这段代码会变得更快还是我必须使用一些软件包来帮助我?

0 个答案:

没有答案