从字典列表中获取平均值

17

我有一个字典列表。假设它长这样:

total = [{"date": "2014-03-01", "value": 200}, {"date": "2014-03-02", "value": 100}{"date": "2014-03-03", "value": 400}]

我需要从中获取最大值、最小值和平均值。我可以通过以下代码获取最大值和最小值:

print min(d['value'] for d in total)
print max(d['value'] for d in total)

但是现在我需要得到它的平均值。如何做到?

4个回答

33

只需将值的总和除以列表的长度:

print sum(d['value'] for d in total) / len(total)
请注意,整数相除会返回整数值。这意味着[5, 5, 0, 0]的平均值将为2而不是2.5。如果您需要更精确的结果,则可以使用float()函数:
print float(sum(d['value'] for d in total)) / len(total)

我添加了有关浮点结果的注释。 - catavaran

7

我需要一个更通用的实现来处理整个字典的相同内容。因此,这里有一个简单的选项:

def dict_mean(dict_list):
    mean_dict = {}
    for key in dict_list[0].keys():
        mean_dict[key] = sum(d[key] for d in dict_list) / len(dict_list)
    return mean_dict

测试:

dicts = [{"X": 5, "value": 200}, {"X": -2, "value": 100}, {"X": 3, "value": 400}]
dict_mean(dicts)
{'X': 2.0, 'value': 233.33333333333334}

哦,为什么要在同一个列表上循环多次? 循环列表元素然后在内部引用第i个列表元素的字典元素求和不是更好吗? - avans

3
reduce(lambda x, y: x + y, [d['value'] for d in total]) / len(total)

猫帆的回答更简单,您不需要使用lambda。

1
如果值是数字列表,则这是dsalaj答案的改进:
def dict_mean(dict_list):
    mean_dict = {}
    for key in dict_list[0].keys():
        mean_dict[key] = np.mean([d[key] for d in dict_list], axis=0)
    return mean_dict

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接