【问题标题】:Python - Compute average of integers in dictionary values (nested lists)Python - 计算字典值中整数的平均值(嵌套列表)
【发布时间】:2018-09-18 06:54:39
【问题描述】:

很难用语言来描述我的问题,所以这里有一个简单的例子来说明我正在尝试做的事情。

我有一本字典……

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 新手,对于我的问题难以解释,我深表歉意。

提前感谢您的帮助。

【问题讨论】:

  • 你确定 aDict 值中列表的长度吗?
  • 是的,aDict 值中的列表长度是一样的

标签: python list dictionary average


【解决方案1】:

您可以通过大量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())]

【讨论】:

  • 你可以from __future__ import division在Python 2.2+中获得Python 3风格的划分
  • 谢谢!之前想不到zip功能!
【解决方案2】:

map+list 对@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())]}

或者map + map@schwobaseggl 的解决方式:

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())))}

from __future__ import division 如果版本低于 3 和高于 2.2,得到 python 3 样式划分

他们都输出:

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

【讨论】:

    猜你喜欢
    • 2021-12-24
    • 1970-01-01
    • 2023-04-03
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多