使用列表字典的元素

时间:2015-11-19 03:37:51

标签: python dictionary moving-average

我有一个数据集,它是一个由列表组成的字典(每个列表中的元素数量是固定的,但是字典本身有大量的条目)

E.g:

curl

现在我需要创建一个dict:

d1 = {0: [1,2,3], 
      1: [2,3,4], 
      2: [3,4,5], 
      3: [4,5,6], 
      4: [5,6,7] }

,平均窗口随着我向下移动而增加。 我无法解决这个问题并寻求任何形式的帮助。

这是我的尝试(似乎没有做正确的事情:()

d_required = { 0: [d1[0][0]/1, d1[0][1]/1, d1[0][2]/1],
               1: [(d1[0][0] + d1[1][0])/2, (d1[0][1] + d1[1][1])/2, (d1[0][2] + d1[1][2])/2],
               2: [(d1[0][0] + d1[1][0] + d1[2][0])/3, (d1[0][1] + d1[1][1] + d1[2][1])/3, (d1[0][2] + d1[1][2] + d[2][2])/3],
               3: [(d1[0][0] + d1[1][0] + d1[2][0] +d1[3][0])/4, (d1[0][1] + d1[1][1] + d1[2][1] + d1[3][1])/4, (d1[0][2] + d1[1][2] + d[2][2] + d[3][2])/4], 
               4: [(d1[0][0] + d1[1][0] + d1[2][0] + d1[3][0] + d1[4][0])/5, (d1[0][1] + d1[1][1] + d1[2][1] + d1[3][1] + d1[4][1])/5, (d1[0][2] + d1[1][2] + d[2][2] + d[3][2] + d1[4][2])/5]}

2 个答案:

答案 0 :(得分:3)

s = [0., 0., 0.]
resultDict = {}
for c, k in enumerate(sorted(d1)):
    s = [sum((x,y)) for x,y in zip(s, d1[k])]
    resultDict[k] = [x/(c+1) for x in s]

在上面:

  • s是累计金额

  • resultDict是新词典

对于d1中的每个密钥,我们更新累计金额s并向resultDict添加新条目。

这会产生resultDict

{0: [1, 2, 3],
 1: [1.5, 2.5, 3.5],
 2: [2, 3, 4],
 3: [2.5, 3.5, 4.5],
 4: [3, 4, 5]}

作为一个功能

上面的代码,以函数的形式,如下所示:

def cumave(d1):
    s = [0., 0., 0.]
    resultDict = {}
    for c, k in enumerate(sorted(d1)):
        s = [sum((x,y)) for x,y in zip(s, d1[k])]
        resultDict[k] = [x/(c+1) for x in s]
    return resultDict

答案 1 :(得分:1)

错误在一行。

for k in range(d):

range不包括最后一个值。将其更改为range(d+1)