python - 跨 python 对象聚合字典结果
问题描述
我知道如果没有这种方式,我可能会采用的只是一堆 for 循环,但我认为它必须可以更轻松地完成。我有一个充满杂乱无章的非统一数据集的文件夹,我正在编写一个 python 脚本来解析它并分析一些结果。我采取的方法是通过它们的一些特征和度量将数据堆解析为一个类定义的对象——每个数据集一个对象——所以最后我将拥有一个刚刚填充的同一类的对象数组不同的数据。
每个对象中的重要内容都存储在列表中。例如:
data = {
'attribute_1': true,
'attribute_2': false,
'attribute_1_speed': 25.3,
'attribute_2_speed': null
}
所以最后我有 x 个对象,每个对象都有相同的字典,是否有一个现有的函数可以迭代它们并创建一个排序/聚合值的哈希映射,以查看每个属性的真/假值的分布,也许意味着和数值的平均值?
解决方案
由于您没有提供您的实现,我编写了一个脚本,我相信它可以实现您需要的聚合。我的实现假设您的对象只有一个属性(即字典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
,如果存在,则将值加一。
推荐阅读
- linux - Yocto 配方依赖
- scala - scala 2.13 自动隐式解析错误
- python-3.x - 用于语音识别的 Vosk-api python。类似谷歌的语音适应功能?
- python - 关闭前一个顶层窗口后创建顶层 tkinter 窗口
- python - Python 最大线程数
- javascript - 借助 xml 在 mxGraph 中显示图表
- python - 如何为 VS Code python 调试器和测试激活我的 conda 环境?
- javascript - React 如何在脚本运行完成后才构建 React 页面
- javascript - 我试图制作一个不和谐的机器人主要是为了好玩,但我似乎无法让我的 kick 命令中使用的 if else 语句正常工作
- r - 使用 readxl 和 read_excel() 无法获得结果 - .xls 中的流氓第 2 行和第 3 行