使用列表字典的元素

working with elements of dict of lists

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

例如:

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]}

即,随着我向下移动字典,平均数 window 增加。 我无法集中精力编写代码,正在寻求任何形式的帮助。

这是我的尝试(这看起来并不正确:( )

def weirdProcessing(dataDict):
    resultDict = {}

    for d in sorted(dataDict.keys()):
        l = dataDict[d]
        res = []
        for i in range(len(l)):
            tempSum = 0
            for k in range(d):
                tempSum += dataDict[k][i] 

            res.append(tempSum/float(d+1))
        if d == 0:
            resultDict[d] = copy.deepcopy(dataDict[d])
        else:
            resultDict[d] = res

    return resultDict

错误在一行中。

for k in range(d):

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

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