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

问题描述 投票:-1回答:2

用文字描述我的问题是如此困难,所以这里是我想要做的一个简单的例子。

我有一本字典......

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的新手,我真的为我的问题的困难解释道歉。

提前感谢您的帮助。

python list dictionary average
2个回答
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())]

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]]
© www.soinside.com 2019 - 2024. All rights reserved.