Geo*_*ina 4 python iteration dictionary average
我正试图找到从字典中提取平均值的最快/最有效的方法.我正在处理的任务要求它执行数千次,所以每次只需迭代dict中的所有值,找到平均值就完全没有效率.数以百计的新键值对被添加到字典中,我们需要在每次发生时找到平均值.我们还需要在每次更新值时找到新的平均值,这会发生数千次.
在此先感谢 - 这是一个非常棒的地方.
Ned*_*der 11
创建自己的dict子类来跟踪计数和总数,然后可以快速返回平均值:
class AvgDict(dict):
def __init__(self):
self._total = 0.0
self._count = 0
def __setitem__(self, k, v):
if k in self:
self._total -= self[k]
self._count -= 1
dict.__setitem__(self, k, v)
self._total += v
self._count += 1
def __delitem__(self, k):
v = self[k]
dict.__delitem__(self, k)
self._total -= v
self._count -= 1
def average(self):
if self._count:
return self._total/self._count
a = AvgDict()
assert a.average() is None
a[1] = 1
assert a.average() == 1
a[2] = 10
assert a.average() == 5.5
assert a[2] == 10
a[1] = 5
assert a.average() == 7.5
del a[1]
assert a.average() == 10
Run Code Online (Sandbox Code Playgroud)