使用列表字典的元素
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
我有一个数据集,它是一个由列表组成的字典(每个列表中的元素数量是固定的,但字典本身有大量条目)
例如:
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