对象列表中键值的平均值



我有一个这样的对象列表。

data = [{123: 0.5}, {123: 0.6}, {23: 0.3}, {23: 0.2}]

如果密钥是重复的,那么所有值将被平均如下。

[{123: 0.55}, {23: 0.25}]

我试过使用lambda,但没有成功。

您可以通过以下两个步骤完成:

  1. 将列表dict中的值分组
  2. 获取他们的平均值并构建新列表

这里我在步骤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}

最新更新