Python按type合并字典列表同类型data数据的实现方案
合并同类型字典并将data整合成JSON数组字符串
问题描述
我有一个字典列表,需要将相同type的元素合并,并把对应的data字段中的JSON对象整合为JSON数组字符串,最终生成新的字典列表,之后会根据type提交到对应REST API。
原始数据
dict_list = [ {'type': 'hr', 'data': '{"Name": "Name1","City": "city1", "EMail": "email1@gmail.com"}'}, {'type': 'hr', 'data': '{"Name": "Name2","City": "city1", "EMail": "email2@gmail.com"}'}, {'type': 'it', 'data': '{"Name": "Name3","City": "city3", "EMail": "email3@gmail.com"}'}, {'type': 'it', 'data': '{"Name": "Name4","City": "city2", "EMail": "email4@gmail.com"}'}, {'type': 'op', 'data': '{"Name": "Name5","City": "city1", "EMail": "email5@gmail.com"}'} ]
预期输出
expected_dict_list = [ {'type':'hr', 'data':'[{"Name":"Name1","City":"city1","EMail":"email1@gmail.com"}, {"Name":"Name2","City":"city1","EMail":"email2@gmail.com"}]'}, {'type':'it', 'data':'[{"Name":"Name3","City":"city3","EMail":"email3@gmail.com"},{"Name":"Name4","City":"city2","EMail":"email4@gmail.com"}]'}, {'type':'op', 'data':'[{"Name":"Name5","City":"city1","EMail":"email5@gmail.com"}]'} ]
解决方案
使用Python的json模块处理JSON解析与序列化,配合字典分组实现需求:
import json # 原始数据 dict_list = [ {'type': 'hr', 'data': '{"Name": "Name1","City": "city1", "EMail": "email1@gmail.com"}'}, {'type': 'hr', 'data': '{"Name": "Name2","City": "city1", "EMail": "email2@gmail.com"}'}, {'type': 'it', 'data': '{"Name": "Name3","City": "city3", "EMail": "email3@gmail.com"}'}, {'type': 'it', 'data': '{"Name": "Name4","City": "city2", "EMail": "email4@gmail.com"}'}, {'type': 'op', 'data': '{"Name": "Name5","City": "city1", "EMail": "email5@gmail.com"}'} ] # 按type分组,收集解析后的JSON对象 grouped_data = {} for item in dict_list: type_key = item['type'] # 解析data字段的JSON字符串为Python字典 parsed_data = json.loads(item['data']) if type_key not in grouped_data: grouped_data[type_key] = [] grouped_data[type_key].append(parsed_data) # 生成最终的字典列表 result = [] for type_key, data_items in grouped_data.items(): # 将Python列表序列化为JSON数组字符串,可选去掉空格以匹配预期格式 json_str = json.dumps(data_items).replace(' ', '') result.append({'type': type_key, 'data': json_str}) # 验证结果 print(result)
代码说明
- 分组解析:遍历原始列表,按
type作为键,将每个data字段解析为Python字典后加入对应分组列表 - 序列化生成结果:对每个分组的字典列表,用
json.dumps转为JSON数组字符串,若需要和预期格式完全一致(无空格),可调用replace(' ', '')去除空格 - 生成目标列表:将每个
type和对应的JSON数组字符串组合成字典,加入结果列表
内容的提问来源于stack exchange,提问作者Nicolas
相关产品推荐
相关产品推荐

