Python-计算字典值(嵌套列表)中整数的平均值

时间:2018-09-18 06:54:40

标签: python list dictionary average

用语言描述我的问题非常困难,所以这是我要做什么的一个简单示例。

我有字典...

aDict= {'user1':[[1,2,3],[4,5,6]], 'user2': [[2,3,4],[5,6,7]]}

我想计算嵌套循环中同一索引中数字的平均值。

我想要得到的理想结果是...

anotherDict = {'user' : [[1.5 , 2.5 , 3.5 ],[ 4.5 , 5.5 , 6.5 ]]}

1.5 = key-user1.values [0] [0]的平均值为1,key-user2.values [0] [0]的平均值为2 2.5 =来自key-user1.values [0] [1]的平均值2和来自key-user2.values [0] [1]的平均值3 ...等等 6.5 =来自key-user1.values [1] [2]的平均值为6,来自key-user2.values [1] [2]的平均值为7

我真的是python新手,对于这个问题的困难解释,我深表歉意。

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

您可以通过许多zip(*...)换位使用以下嵌套理解:

aDict= {'user1':[[1,2,3],[4,5,6]], 'user2': [[2,3,4],[5,6,7]]}
[[sum(x)/len(x) for x in zip(*vals)] for vals in zip(*aDict.values())]
# [[1.5, 2.5, 3.5], [4.5, 5.5, 6.5]]

在Python2中,您必须采取一些措施来获取float的值,例如:

[[1.0*sum(x)/len(x) for x in zip(*vals)] for vals in zip(*aDict.values())]

答案 1 :(得分:0)

map + @ schwobaseggl解决方案的列表理解方式:

print([list(map(lambda x: sum(x)/len(x),zip(*v))) for v in zip(*aDict.values())])

并将其分配给新字典:

d={'user':[list(map(lambda x: sum(x)/len(x),zip(*v))) for v in zip(*aDict.values())]}

或者@schwobaseggl解决方案的map + map方法:

print(list(map(lambda v: list(map(lambda x: sum(x)/len(x),zip(*v))),zip(*aDict.values()))))

并将其分配给新字典:

d={'user':list(map(lambda v: list(map(lambda x: sum(x)/len(x),zip(*v))),zip(*aDict.values())))}

如果版本低于3且高于2.2,请执行from __future__ import division,以获得python 3样式划分

它们全部输出:

[[1.5, 2.5, 3.5], [4.5, 5.5, 6.5]]