【问题标题】:average of key value in list of objects对象列表中键值的平均值
【发布时间】:2022-01-14 18:48:43
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 你能把你的尝试包括在这里吗?以便用户可以指出其中的任何错误?

标签: python dictionary


【解决方案1】:

您可以分两步完成:

  1. 对列表字典中的值进行分组
  2. 获取他们的平均值并构建新列表

这里我使用defaultdict(list) 进行第 1 步,因为它很简单:

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}]

【讨论】:

    【解决方案2】:

    您是否特别追求高效。一个快速的暴力破解方法如下所示:

    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}
    

    如果您需要字典列表,那么您可以创建一个列表,其中每个条目都是上面转换为字典的键。

    【讨论】:

    【解决方案3】:

    如果您不介意使用 pandas:

    import pandas as pd
    
    dict(pd.DataFrame(data).mean())
    

    它给出:

    {23: 0.25, 123: 0.55}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-10
      • 1970-01-01
      • 2011-06-27
      • 2021-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多