如何按Cate值筛选并转换List of Dictionaries中的数据?
Python实现指定分类的字典重组方案
核心思路
- 先精准筛选出符合要求的Cate值:仅保留以
GD或LD开头,且后缀为31/33/35/37/39的字典元素 - 对每个符合条件的元素,根据Cate前缀(GD/LD)重命名Name字段为
Name_G或Name_L,只保留Id和新的Name字段 - 最后将处理后的元素按Cate值分组,整理成你需要的列表嵌套字典结构
完整实现代码
p = [ {"Id": "47","Name": "l","Cate": "GD31","Mark": 0,"Code": "l"}, {"Id": "58","Name": "k","Cate": "GD33","Mark": 0,"Code": "k"}, {"Id": "40","Name": "j","Cate": "GD35","Mark": 0,"Code": "j"}, {"Id": "15","Name": "i","Cate": "GD37","Mark": 0,"Code": "i"}, {"Id": "39","Name": "h","Cate": "GD39","Mark": 0,"Code": "h"}, {"Id": "75","Name": "g","Cate": "LD31","Mark": 0,"Code": "g"}, {"Id": "12","Name": "f","Cate": "LD33","Mark": 0,"Code": "d"}, {"Id": "92","Name": "e","Cate": "LD35","Mark": 0,"Code": "e"}, {"Id": "42","Name": "d","Cate": "LD37","Mark": 0,"Code": "d"}, {"Id": "11","Name": "c","Cate": "LD39","Mark": 0,"Code": "c"}, {"Id": "51","Name": "b","Cate": "SWW","Mark": 0,"Code": "b"}, {"Id": "13","Name": "a","Cate": "SMM","Mark": 0,"Code": "a"} ] # 定义需要处理的分类后缀,确保只筛选GD31/LD31这类成对的分类 target_suffixes = {'31', '33', '35', '37', '39'} # 初始化分组用的字典 grouped_data = {} for item in p: cate = item['Cate'] # 检查当前元素的Cate是否符合规则 if (cate.startswith('GD') or cate.startswith('LD')) and cate[2:] in target_suffixes: # 根据前缀确定Name的新键名 name_key = 'Name_G' if cate.startswith('GD') else 'Name_L' # 构造只包含需要字段的新字典 processed_item = { 'Id': item['Id'], name_key: item['Name'] } # 按Cate值分组,没有对应键就创建新列表 if cate not in grouped_data: grouped_data[cate] = [] grouped_data[cate].append(processed_item) # 转换成目标要求的列表格式 new = [grouped_data] # 打印结果验证(可选) import json print(json.dumps(new, indent=2))
代码说明
- 筛选逻辑:通过
target_suffixes限定后缀,结合startswith判断前缀,确保只处理你需要的分类,不会误处理SWW/SMM这类无关元素 - 字段重命名:根据Cate的前缀动态生成Name的新键名,自动区分GD和LD对应的字段
- 分组整理:用字典按Cate值分组存储处理后的元素,最后把字典包裹进列表,完全匹配你要的
new结构
运行结果
执行代码后,new的结构如下:
[ { "GD31": [ { "Id": "47", "Name_G": "l" } ], "GD33": [ { "Id": "58", "Name_G": "k" } ], "GD35": [ { "Id": "40", "Name_G": "j" } ], "GD37": [ { "Id": "15", "Name_G": "i" } ], "GD39": [ { "Id": "39", "Name_G": "h" } ], "LD31": [ { "Id": "75", "Name_L": "g" } ], "LD33": [ { "Id": "12", "Name_L": "f" } ], "LD35": [ { "Id": "92", "Name_L": "e" } ], "LD37": [ { "Id": "42", "Name_L": "d" } ], "LD39": [ { "Id": "11", "Name_L": "c" } ] } ]
内容的提问来源于stack exchange,提问作者user12341055
相关产品推荐
相关产品推荐

