You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pythonic方式按论坛聚合帖子正负评分?

Pythonic方式按论坛聚合正负评分

假设你手里有这么一组论坛帖子的统计数据,需要按论坛维度把每个论坛的正负评分分别加总,转换成指定格式的JSON输出。先看看你的输入示例:

{
  "Posting_Stats": {
    "Posts": [
      {
        "Date": "2020-03-29 12:41:00",
        "Forum": "panorama",
        "Positive": 2,
        "Negative": 0
      },
      {
        "Date": "2020-03-29 12:37:00",
        "Forum": "web",
        "Positive": 6,
        "Negative": 0
      },
      {
        "Date": "2020-03-29 12:37:00",
        "Forum": "web",
        "Positive": 2,
        "Negative": 2
      }
    ]
  }
}

下面是几种Pythonic的实现方式,挑最顺手的用就行:

方法一:用collections.defaultdict(原生库,轻量高效)

这个方法用标准库的字典来聚合数据,逻辑清晰,不需要额外依赖:

import json
from collections import defaultdict

# 假设输入数据已经加载进来了
input_data = {
  "Posting_Stats": {
    "Posts": [
      {"Date": "2020-03-29 12:41:00", "Forum": "panorama", "Positive": 2, "Negative": 0},
      {"Date": "2020-03-29 12:37:00", "Forum": "web", "Positive": 6, "Negative": 0},
      {"Date": "2020-03-29 12:37:00", "Forum": "web", "Positive": 2, "Negative": 2}
    ]
  }
}

# 初始化聚合字典,每个论坛对应一个包含正负分的字典
forum_stats = defaultdict(lambda: {"Positive": 0, "Negative": 0})

# 遍历所有帖子,累加分数
for post in input_data["Posting_Stats"]["Posts"]:
    forum = post["Forum"]
    forum_stats[forum]["Positive"] += post["Positive"]
    forum_stats[forum]["Negative"] += post["Negative"]

# 转换成期望的列表格式
result = {"Forum_Stats": [{"Forum": k, **v} for k, v in forum_stats.items()]}

# 输出JSON格式的结果
print(json.dumps(result, indent=2))

运行后得到的输出就是你想要的格式:

{
  "Forum_Stats": [
    {
      "Forum": "panorama",
      "Positive": 2,
      "Negative": 0
    },
    {
      "Forum": "web",
      "Positive": 8,
      "Negative": 2
    }
  ]
}

方法二:用pandas(适合处理大规模数据)

如果你的数据量很大,用pandas的分组聚合会更简洁高效:

import json
import pandas as pd

input_data = {
  "Posting_Stats": {
    "Posts": [
      {"Date": "2020-03-29 12:41:00", "Forum": "panorama", "Positive": 2, "Negative": 0},
      {"Date": "2020-03-29 12:37:00", "Forum": "web", "Positive": 6, "Negative": 0},
      {"Date": "2020-03-29 12:37:00", "Forum": "web", "Positive": 2, "Negative": 2}
    ]
  }
}

# 把帖子数据转成DataFrame
df = pd.DataFrame(input_data["Posting_Stats"]["Posts"])

# 按Forum分组,对Positive和Negative求和
aggregated = df.groupby("Forum")[["Positive", "Negative"]].sum().reset_index()

# 转换成指定的JSON格式
result = {"Forum_Stats": aggregated.to_dict("records")}

print(json.dumps(result, indent=2))

这个方法一行分组求和就搞定了,处理大量数据的时候优势很明显。


内容的提问来源于stack exchange,提问作者Nico Müller

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 08:07:31