我有一个sorteddict
,我对这些值的累积总和感兴趣:
>>> from blist import sorteddict
>>> import numpy as np
>>> x = sorteddict({1:1, 2:2, 5:5})
>>> zip(x.keys(), np.cumsum(x.values()))
[(1, 1), (2, 3), (5, 8)]
但是,我经常需要更新字典,因此需要重新计算累积总和:
>>> x[4] = 4
>>> zip(x.keys(), np.cumsum(x.values()))
[(1, 1), (2, 3), (4, 7), (5, 12)]
>>> x[3] = 3
>>> zip(x.keys(), np.cumsum(x.values()))
[(1, 1), (2, 3), (3, 6), (4, 10), (5, 15)]
我想知道是否有一些聪明的方法可以有效地维持累积金额,而不是不断地重新计算累积金额?
注意
>>> import sys
>>> sys.version
'2.7.11 (default, Jun 15 2016, 17:53:20) [MSC v.1800 32 bit (Intel)]'
一般来说,我的键和值也不一样 - 我的例子中只是懒惰
答案 0 :(得分:0)
如何?
import collections
def add_and_regenerate_sums(term, master):
index, value = term
master[index] = value
master = collections.OrderedDict(sorted(master.items(), key=lambda z: z[0]))
y = dict()
sum_of = 0
for i, j in master.items():
sum_of += j
y[i] = sum_of
return dict(sorted(y.items(), key=lambda z: z[0])), master
x = collections.OrderedDict({1:1, 2:2, 5:5})
sums, master = add_and_regenerate_sums((3, 10), x)
print(sums)
print(master)
然后,您可以根据加法以及稍后要使用的新字典来获得总和。