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

C#实现:按重复属性分组,将非重复列折叠为子列表

嘿,这个需求我熟!本质就是把重复属性作为分组依据,把唯一属性聚合到子列表里对吧?我给你两种实用的实现思路,你可以根据自己的场景选:

方法一:用字典手动分组(更直观,无需预排序)

这种方法不用提前对列表排序,直接遍历每个对象,把重复属性组合成唯一键,再把唯一属性归集到对应分组的子列表中,灵活性很高。

以Python为例,代码实现如下:

# 假设originalobject是你的对象列表,每个对象具备指定属性
grouped_result = {}

for obj in originalobject:
    # 用重复属性组合成分组的唯一标识键
    group_key = (obj.monitorName, obj.ProcessGUID, obj.Apikey, obj.AIRSTATION)
    # 提取需要折叠的非重复属性,封装成字典方便后续使用
    unique_attrs = {
        "variableName": obj.variableName,
        "id": obj.id,
        "AIRSTATIONChannel": obj.AIRSTATIONChannel
    }
    # 如果分组不存在,初始化分组结构
    if group_key not in grouped_result:
        grouped_result[group_key] = {
            "monitorName": obj.monitorName,
            "ProcessGUID": obj.ProcessGUID,
            "Apikey": obj.Apikey,
            "AIRSTATION": obj.AIRSTATION,
            "details": []
        }
    # 将当前对象的唯一属性添加到分组的子列表中
    grouped_result[group_key]["details"].append(unique_attrs)

# 把字典的值转换为列表,得到最终的分组结果
final_data = list(grouped_result.values())
方法二:用itertools.groupby(适合可排序的场景)

如果你的列表可以先按重复属性排序,用itertools.groupby会更简洁,这是Python标准库提供的分组工具,效率也不错。

代码示例:

from itertools import groupby

# 先按分组属性排序,groupby要求连续的相同键才能被分到同一组
sorted_objects = sorted(originalobject, 
                        key=lambda x: (x.monitorName, x.ProcessGUID, x.Apikey, x.AIRSTATION))

final_data = []
# 按指定键分组遍历
for group_key, obj_group in groupby(sorted_objects, 
                                   key=lambda x: (x.monitorName, x.ProcessGUID, x.Apikey, x.AIRSTATION)):
    # 解析分组键的属性值
    monitor_name, process_guid, api_key, airstation = group_key
    # 收集组内所有对象的唯一属性,组成子列表
    details_list = [
        {
            "variableName": obj.variableName,
            "id": obj.id,
            "AIRSTATIONChannel": obj.AIRSTATIONChannel
        } for obj in obj_group
    ]
    # 组装分组结果并添加到最终列表
    final_data.append({
        "monitorName": monitor_name,
        "ProcessGUID": process_guid,
        "Apikey": api_key,
        "AIRSTATION": airstation,
        "details": details_list
    })

结果说明

最终的final_data列表里,每个元素都是一个分组对象:包含重复的monitorName、ProcessGUID、Apikey、AIRSTATION属性,以及一个details子列表,子列表里是该分组下所有对应的variableName、id、AIRSTATIONChannel条目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:05:32