我有一个这样的对象列表。
data = [{123: 0.5}, {123: 0.6}, {23: 0.3}, {23: 0.2}]
如果密钥是重复的,那么所有值将被平均如下。
[{123: 0.55}, {23: 0.25}]
我试过使用lambda,但没有成功。
您可以通过以下两个步骤完成:
- 将列表dict中的值分组
- 获取他们的平均值并构建新列表
这里我在步骤1中使用defaultdict(list)
,因为它非常简单:
from collections import defaultdict
groups = defaultdict(list)
for d in data:
for k,v in d.items():
groups[k].append(v)
out = [{k: sum(v)/len(v)} for k,v in groups.items()]
print(out)
输出:
[{123: 0.55}, {23: 0.25}]
你会特别追求高效的东西吗。一个快速的野兽评估会是这样的:
data = [{123: 0.5}, {123: 0.6}, {23: 0.3}, {23:0.2}]
my_dictionary = {}
for dictionary in data:
for key in dictionary:
if key in my_dictionary:
my_dictionary[key].append(dictionary[key])
else:
my_dictionary[key] = [dictionary[key]]
for key in my_dictionary:
my_dictionary[key] = sum(my_dictionary[key]) / len(my_dictionary[key])
print(my_dictionary)
输出如下:
{123: 0.55, 23: 0.25}
如果你需要一个字典列表,那么你可以创建一个列表,每个条目都是上面转换为字典的字典的关键字。
如果您不介意使用pandas:
import pandas as pd
dict(pd.DataFrame(data).mean())
它给出:
{23: 0.25, 123: 0.55}