Python 嵌套对象的更快数据聚合算法
我在学习python中扁平化/聚合嵌套对象数据的新方法时遇到了一些困难。我目前的实现相当缓慢,我想知道一些加速处理的方法。考虑到我有一个捐赠数据集定义为:Python 嵌套对象的更快数据聚合算法,python,Python,我在学习python中扁平化/聚合嵌套对象数据的新方法时遇到了一些困难。我目前的实现相当缓慢,我想知道一些加速处理的方法。考虑到我有一个捐赠数据集定义为: donations = [ { "amount": 100, "organization": { "name": "Org 1", "total_budget": 8000, "
donations = [
{
"amount": 100,
"organization": {
"name": "Org 1",
"total_budget": 8000,
"states": [
{
"name": "Maine",
"code": "ME"
},
{
"name": "Massachusetts",
"code": "MA"
}
]
}
},
{
"amount": 5000,
"organization": {
"name": "Org 2",
"total_budget": 10000,
"states": [
{
"name": "Massachusetts",
"code": "MA"
}
]
}
},
{
"amount": 5000,
"organization": {
"name": "Org 1",
"total_budget": 8000,
"states": [
{
"name": "Maine",
"code": "ME"
},
{
"name": "Massachusetts",
"code": "MA"
}
]
}
}
]
这些对象之间的关系是,捐赠与单个组织相关,而一个组织可以与一个或多个国家相关
此外,我还可以获得组织数据集,如下所示:
organizations = [
{
"name": "Org 1",
"total_budget": 8000,
"states": [
{
"name": "Maine",
"code": "ME"
},
{
"name": "Massachusetts",
"code": "MA"
}
]
},
{
"name": "Org 2",
"total_budget": 10000,
"states": [
{
"name": "Massachusetts",
"code": "MA"
}
]
}
]
我希望实现的产出是按州汇总捐款总额和总预算,其中捐款数额和本组织的总预算在与其相关的所有州之间平均分配。上述数据集的示例:
results = {
"ME": {
"name": "Maine",
"total_donations": 2550
"total_budget": 4000
},
"MA": {
"name": "Massachusetts",
"total_donations": 7550
"total_budget": 14000
}
}
到目前为止,我尝试使用for循环迭代每个捐赠和组织,并将它们排序为defaultdict:
from collections import defaultdict
def get_stats():
return { "total_donations": 0, "total_budget": 0, "name": "" }
results = defaultdict(get_stats)
for donation in donations:
for state in donation["organization"]["states"]
results[state["code"]]["total_donations"] += donation["amount"]/len(donation["organization"]["states"])
for organization in organizations:
for state in organization["states"]:
results[state["code"]]["total_budget"] += organization["total_budget"]/len(organization["states"])
results[state["code"]]["name"] = state["state"]
我曾考虑在这里使用map/reduce,但我没有感觉到它们会提高性能。这里的任何建议都会被超级赏识。如果数据集很大,性能是你最大的关注点,那么你可能应该考虑使用<代码>熊猫> /COD>。我正在看很多代码< <代码>熊猫> <代码>,但是我不知道如何在那里匹配这些数据集。对示例实现有什么建议吗?当前代码有多慢?任何明显的瓶颈?第一个循环(捐赠)需要约20秒,第二个(组织)需要约5秒seconds@JasperSardonicus列表中有多少个对象?对于更多的对象,这些计时是如何缩放的?