【问题标题】:Aggregate dictionary results across python objects跨 python 对象聚合字典结果
【发布时间】:2021-03-17 11:01:00
【问题描述】:

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

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

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

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

【问题讨论】:

  • 请包括您的完整脚本以及您当前和预期的输出。

标签: python dictionary oop


【解决方案1】:

由于您没有提供您的实现,我编写了一个脚本,我相信它可以实现您需要的聚合。我的实现假设您的对象只有一个属性(即字典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循环检查聚合字典aggregation_dict中是否已经存在特定字段(我选择根据a1聚合数据,但显然你可以将其更改为任何你想要的),如果存在,则将值加一.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 2014-02-19
    • 2019-10-29
    • 2018-06-25
    • 2018-06-18
    相关资源
    最近更新 更多