几个相同的字典组成部分的意思



我有几个Python3字典,它们具有相同的结构,将字符串标签映射到实际值。例如,对于4个条目,数据集可能看起来像:

{"a":1.2,"b":3.2,"c":5.65}

{"a":2.5,"b":3.8,"c":9.65}

{"a":2.8,"b":3.2,"c":2.65}

{"a":1.8,"b":1.2,"c":3.65}

我想对这些组件进行组件平均,所以最终结果应该是:

{"a":2.07,"b":2.85,"c":5.4}

我知道如何使用for循环来解决问题,将值相加,并将每个条目除以末尾的计数,就像一样

def final_results(scores):
result = {}
for score in scores:
for k, v in score.items():
if k not in result:
result[k] = v
else:
result[k] += v
for k, v in result:
result[k] = v / len(scores)
return result

,但我正在寻找一种以函数方式解决问题的方法,使用lambda、map、filter等。有吗?

我假设您有一个dicts列表:

data = [{'a': 1.2, 'b': 3.2, 'c': 5.65},
{'a': 2.5, 'b': 3.8, 'c': 9.65}, 
{'a': 2.8, 'b': 3.2, 'c': 2.65}, 
{'a': 1.8, 'b': 1.2, 'c': 3.65}]

在普通Python中(不包括itertools导入(,一个功能性很强的单行可以是:

from itertools import reduce
{key: value / len(data) for key, value in 
reduce(lambda item1, item2: {key: value + item2[key] 
for key, value in item1.items()}, 
data, 
{key: 0 for key in data[0]}).items()}

它给出

{'a': 2.075, 'b': 2.8499999999999996, 'c': 5.3999999999999995}

使用Pandas,您可以执行以下操作:

from pandas import DataFrame
DataFrame(data).mean()

导致

a    2.075
b    2.850
c    5.400
dtype: float64

从技术上讲,这是一个Pandas系列,因此在其输出中包含了dtype。如果您想将结果转换为如上所述的dict,请使用:

DataFrame(d).mean().to_dict()

获取

{'a': 2.075, 'b': 2.8499999999999996, 'c': 5.3999999999999995}

toolz:还有一个库解决方案

from toolz import merge_with
d1 = {"a": 1.2, "b": 3.2, "c":5.65}
d2 = {"a": 2.5, "b": 3.8, "c":9.65}
d3 = {"a": 2.8, "b": 3.2, "c":2.65}
d4 = {"a": 1.8, "b": 1.2, "c":3.65}
merge_with(lambda args: sum(args)/len(args), d1, d2, d3, d4)

从某种意义上说,它是纯Python,因为库并没有外部依赖关系。

最新更新