在flask应用程序中(与我的问题无关),我有一个存储结果列表的数据库。每个结果都是一个带有分数和时间字符串的对象;在json中看起来像这样
[{"score": 8, "time": "02/05/2019"}, {"score": 10, "time": "02/05/2019"}, {"score": 7, "time": "01/05/2019"}]
我想将具有相同时间的对象分组为相同类型的新对象,其得分是所分组对象的得分的平均值。所以我想将上面的列表转换成类似这样的内容
[{/* Average of the scores with the same time */ "score": 9, "time": "02/05/2019"}, /* Other values */]
我必须添加它。我不知道为什么将其标记为重复,因为链接的问题不完整,没有重点,只有一个答案(无论如何我都无法使用,因为它使用了外部库,我也不想添加任何内容我的项目的第三方库)。链接的问题是有关元组列表(不是键,值对)的,我要的是对象列表和分组结果的平均值。
答案 0 :(得分:0)
这是使用itertools.groupby
例如:
from itertools import groupby
data = [{"score": 8, "time": "02/05/2019"}, {"score": 10, "time": "02/05/2019"}, {"score": 7, "time": "01/05/2019"}]
result = []
for k, v in groupby(sorted(data, key=lambda x: x["time"]), lambda x: x["time"]):
val = list(v)
score = 0
for i in val:
score += i["score"]
result.append({"time": k, "score": score/len(val)})
print(result)
输出:
[{'time': '01/05/2019', 'score': 7.0}, {'time': '02/05/2019', 'score': 9.0}]