用文字描述我的问题是如此困难,所以这里是我想要做的一个简单的例子。
我有一本字典......
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.5 = key-user1.values [0] [1]和3的平均值为2来自key-user2.values [0] [1] ...等...... 6.5 =来自key-user1.values [1] [2]的平均值为6,来自key-user2.values [1] [2]的7 ]
我是python的新手,我真的为我的问题的困难解释道歉。
提前感谢您的帮助。
您可以使用以下嵌套理解使用大量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())]
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]]