首页 > 解决方案 > 跨 python 对象聚合字典结果

问题描述

我知道如果没有这种方式,我可能会采用的只是一堆 for 循环,但我认为它必须可以更轻松地完成。我有一个充满杂乱无章的非统一数据集的文件夹,我正在编写一个 python 脚本来解析它并分析一些结果。我采取的方法是通过它们的一些特征和度量将数据堆解析为一个类定义的对象——每个数据集一个对象——所以最后我将拥有一个刚刚填充的同一类的对象数组不同的数据。

每个对象中的重要内容都存储在列表中。例如:

data = {
    'attribute_1': true,
    'attribute_2': false,
    'attribute_1_speed': 25.3,
    'attribute_2_speed': null
}

所以最后我有 x 个对象,每个对象都有相同的字典,是否有一个现有的函数可以迭代它们并创建一个排序/聚合值的哈希映射,以查看每个属性的真/假值的分布,也许意味着和数值的平均值?

标签: pythondictionaryoop

解决方案


由于您没有提供您的实现,我编写了一个脚本,我相信它可以实现您需要的聚合。我的实现假设您的对象只有一个属性(即字典data)。如果不是这种情况,并且您的对象具有类似于字典键的属性,那么实现会更简单:

class X:

    def __init__(self, data):
        self.data = data

data = {
    'a1': True,
    'a2': False,
    'a1_speed': 25.3,
    'a2_speed': None
}
x,y,z = X(data),X(data),X(data)

object_list = []
object_list.append(x)
object_list.append(z)
object_list.append(y)

object_dict = {id(x): x.data['a1'] for x in object_list}
aggregation_dict ={}

for i in object_dict.keys():
    if object_dict[i] in aggregation_dict.keys():
        aggregation_dict[object_dict[i]] += 1
    else:
        aggregation_dict[object_dict[i]] = 1

print(object_dict)
print(aggregation_dict)

输出

{140254557973760: True, 140254557754128: True, 140254557753984: True}
{True: 3}

该函数id创建用于构建的随机键object_dict。For 循环检查聚合字典中是否已经存在特定字段(我选择聚合数据,a1但显然您可以将其更改为您想要的任何内容)aggregation_dict,如果存在,则将值加一。


推荐阅读