我正在寻找一种快速方法来更新(有序)字典中的值,该字典包含数千万个值,更新后的值存储在列表/数组中。你知道吗
我正在编写的程序将原始字典中的键列表(即数字元组)作为numpy数组,并将它们传递给一个函数,该函数返回一个新数字数组(每个键值对应一个)。然后将这个数组与相应的字典值相乘(通过逐段数组相乘),我们希望使用这个返回的1-D值数组来更新字典。新数组中的条目按相应键的顺序存储,因此我可以使用循环遍历字典并逐个更新值。但这效率太低了。有没有更快的方法来更新这个不使用循环的字典中的值?你知道吗
类似问题的一个例子是,如果字典中的键表示空间中点的x和y坐标,值表示在该点上施加的力。如果我们要计算从原点到每个点的扭矩,首先需要一个函数,如:
def euclid(xy):
return (xy[0]**2 + xy[1]**2)**0.5
如果xy
表示x,y元组,则返回到原点的欧氏距离。然后我们可以将其乘以相应的字典值来返回扭矩,如下所示:
for xy in dict.keys():
dict[xy] = euclid(xy)*dict[xy]
但是这个循环很慢,我们可以利用数组代数在一次操作中获得新值:
new_dict_values = euclid(np.array(dict.keys()))*np.array(dict.values())
在这里,我们希望找到一种快速更新词典的方法,而不是利用:
i = 0
for key in dict.keys():
dict[key] = new_dict_value[i]
i += 1
最后一段代码不仅仅是慢。我不认为它做了你想要它做的:
对于字典中的每个键,您将遍历新的dict值的整个列表,并将每个值指定给该键的值,覆盖在循环的上一次迭代中指定的值。这将为您提供一个字典,其中每个键都有new\u dict\u value中最后一个元素的值,我认为这不是您想要的。你知道吗
如果确定字典中键的顺序与新dict值中值的顺序相同,则可以执行以下操作:
Edit:而且,在将来python中不需要遍历一系列数字,也不需要通过索引访问列表的元素。这是:
相当于:
相关问题 更多 >
编程相关推荐