如果我有一个defaultdict(列表)
d =defaultdict(list)
such as 1: 0
1:0.2
1: 0.3
2: 0.2
2: 0.4
2: 0.1
......我如何将其转换为类似的defaultdict(列表) 哪个值是具有相同键的第一个dict的值的累积,但是从不大于1
1: 0
1: 0.2
1: 0.5
2: 0.2
2: 0.6
2: 0.7
.....
到目前为止我只有以下代码,它不太正确: - (
d2 = defaultdict(list)
for k in d.iterkeys()
v +=d(k)
d2[k]. append(v)
答案 0 :(得分:1)
原帖有点混乱:示例看起来像是多图而不是列表的字典。
我假设您有一个带有数字列表的defaultdict,并且您想要创建一个新的defaultdict,其中包含每个列表中值的累积总和。试试这个:
d2 = defaultdict(list)
for k, v in d.iteritems():
sum = 0.0
v2 = []
for x in v:
sum += x
v2.append(sum)
d2[k] = v2
请注意,当您添加新值时,新的defaultdict不会自动计算累积总和。
如果您安装了numpy这样的库,则可以使用numpy.cumsum
而不是使用python循环来计算累积总和。
我不清楚你的意思是“从不大于1”。在累积总和达到1之后,您是否要忽略元素?您是否要忽略大于1的单个值,但是要保持累积较小的值,即使总和超过1?是否要在每个输出列表中包含相同数量的元素,但是将元素值限制为1?
答案 1 :(得分:0)
作为参考,您可以更优雅地做到这一点:
d2 = defaultdict(float)
for k, v in d.iteritems():
d2[k] += v