在Flutter中如何将同一事件列表按UUID拆分为多个子列表
按UUID拆分事件列表方案
需求说明
现有结构化事件列表,每个事件包含专属UUID字段,需将原列表按UUID值拆分,相同UUID的事件归入同一个子列表。
示例输入
{ "events": [ { "uuid": "14B8396A-3B8A-4708-8698-E4CA058F3285" }, { "uuid": "14B8396A-3B8A-4708-8698-E4CA058F3285" }, { "uuid": "14B8396A-3B8A-4708-8698-E4CA058F3285" }, { "uuid": "14B8396A-3B8A-4708-8698-E4CA058F3286" } ] }
期望输出
// UUID为14B8396A-3B8A-4708-8698-E4CA058F3285的分组 { "events": [ { "uuid": "14B8396A-3B8A-4708-8698-E4CA058F3285" }, { "uuid": "14B8396A-3B8A-4708-8698-E4CA058F3285" }, { "uuid": "14B8396A-3B8A-4708-8698-E4CA058F3285" } ] } // UUID为14B8396A-3B8A-4708-8698-E4CA058F3286的分组 { "events": [ { "uuid": "14B8396A-3B8A-4708-8698-E4CA058F3286" } ] }
Python实现代码
from collections import defaultdict def split_events_by_uuid(origin_events): group_map = defaultdict(list) for event in origin_events: group_map[event["uuid"]].append(event) # 按要求格式输出分组 return [{"events": group} for group in group_map.values()] # 测试代码 if __name__ == "__main__": test_events = [ {"uuid": "14B8396A-3B8A-4708-8698-E4CA058F3285"}, {"uuid": "14B8396A-3B8A-4708-8698-E4CA058F3285"}, {"uuid": "14B8396A-3B8A-4708-8698-E4CA058F3285"}, {"uuid": "14B8396A-3B8A-4708-8698-E4CA058F3286"} ] result = split_events_by_uuid(test_events) for item in result: print(item)
逻辑说明
- 用
defaultdict做临时分组容器,省去手动判断UUID是否已存在分组的冗余代码 - 遍历原事件列表时直接按UUID字段将事件存入对应分组
- 最终遍历所有分组,按需求封装为以
events为键的对象即可
内容的提问来源于stack exchange,提问作者Sandeep
相关产品推荐
相关产品推荐

