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

如何统计字典列表中按mne分组的非生产/生产环境应用与代理数量?

问题需求

给定一个字典列表,需按mne字段分组,统计每组的以下数据:

  • 非生产环境(dev、uat)与生产环境(prod)下的appname去重数量(对应字段non_prod_app_count、prod_app_count)
  • 对应环境下的agentname总数(对应字段non_prod_agent_count、prod_agent_count)

输入示例

data = [ 
    {"mne": "ABC", "appname": "abc1", "agentname": "abcagent1", "env": "dev"},
    {"mne": "ABC", "appname": "abc1", "agentname": "abcagent2", "env": "uat"},
    {"mne": "ABC", "appname": "abc1", "agentname": "abcagent3", "env": "prod"},
    {"mne": "ABC", "appname": "abc2", "agentname": "abcagent4", "env": "dev"},
    {"mne": "ABC", "appname": "abc2", "agentname": "abcagent5", "env": "prod"},
    {"mne": "XYZ", "appname": "asf1", "agentname": "asfagent1", "env": "dev"},
    {"mne": "XYZ", "appname": "asf2", "agentname": "asfagent2", "env": "prod"},
]

期望输出示例

[
    {"mne": "ABC", "non_prod_app_count": 2, "prod_app_count": 2, "non_prod_agent_count": 3, "prod_agent_count": 2},
    {"mne": "XYZ", "non_prod_app_count": 1, "prod_app_count": 1, "non_prod_agent_count": 1, "prod_agent_count": 1}
]

统计规则说明

  • 非生产环境(non_prod)包含:dev、uat
  • 生产环境(prod)包含:prod

以输出中第一个字典为例:

  • non_prod_app_count = 2(对应去重后的appname:abc1、abc2)
  • prod_app_count = 2(对应去重后的appname:abc1、abc2)
  • non_prod_agent_count = 3(对应所有non_prod环境下的agentname总数:abcagent1、abcagent2、abcagent4)
  • prod_agent_count = 2(对应所有prod环境下的agentname总数:abcagent3、abcagent5)
实现代码

用Python字典分组统计,逻辑清晰高效:

def calculate_stats(data):
    stats = {}
    for item in data:
        mne = item["mne"]
        appname = item["appname"]
        agentname = item["agentname"]
        env = item["env"]
        
        if mne not in stats:
            stats[mne] = {
                "mne": mne,
                "non_prod_apps": set(),
                "prod_apps": set(),
                "non_prod_agent_count": 0,
                "prod_agent_count": 0
            }
        
        current = stats[mne]
        if env in ("dev", "uat"):
            current["non_prod_apps"].add(appname)
            current["non_prod_agent_count"] += 1
        elif env == "prod":
            current["prod_apps"].add(appname)
            current["prod_agent_count"] += 1
    
    result = []
    for mne_data in stats.values():
        result.append({
            "mne": mne_data["mne"],
            "non_prod_app_count": len(mne_data["non_prod_apps"]),
            "prod_app_count": len(mne_data["prod_apps"]),
            "non_prod_agent_count": mne_data["non_prod_agent_count"],
            "prod_agent_count": mne_data["prod_agent_count"]
        })
    return result

# 测试执行
data = [ 
    {"mne": "ABC", "appname": "abc1", "agentname": "abcagent1", "env": "dev"},
    {"mne": "ABC", "appname": "abc1", "agentname": "abcagent2", "env": "uat"},
    {"mne": "ABC", "appname": "abc1", "agentname": "abcagent3", "env": "prod"},
    {"mne": "ABC", "appname": "abc2", "agentname": "abcagent4", "env": "dev"},
    {"mne": "ABC", "appname": "abc2", "agentname": "abcagent5", "env": "prod"},
    {"mne": "XYZ", "appname": "asf1", "agentname": "asfagent1", "env": "dev"},
    {"mne": "XYZ", "appname": "asf2", "agentname": "asfagent2", "env": "prod"},
]

print(calculate_stats(data))

代码说明

  1. 遍历输入列表,按mne分组,用集合存储不同环境下的appname(自动实现去重),用计数器统计agentname总数。
  2. 遍历完成后,将集合长度转换为最终的app_count字段,整理成期望的输出格式。
  3. 利用集合特性自动处理appname重复值,无需额外去重逻辑。

内容的提问来源于stack exchange,提问作者gvk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 14:45:55