如何从两个含嵌套字典生成指定格式的目标JSON数据?
字典字段提取合并生成目标JSON
需求:现有两个字典dic_a、dic_b(dic_b包含嵌套结构),需要从dic_b中筛选指定字段,将其作为新键leads添加到dic_a中,最终生成目标格式的JSON数据json_c。
原始数据
dic_a = [{'name': 'puskas', 'description': 'puskas is the command center for football', 'size': '251-1K', 'revenue': '$50M-$100M', 'industryTags': ['football federation']}] dic_b = {'page': 1, 'total': 14, 'results': [{'id': 'i01', 'name': {'fullName': 'luka modric', 'givenName': 'luka', 'familyName': 'modric'}, 'role': 'leadership', 'subRole': 'ceo', 'title': 'CEO', 'company': {'name': 'puskas'}, 'email': 'luka@puskas.com', 'verified': True}, {'id': 'i02', 'name': {'fullName': 'gucci mane', 'givenName': 'gucci', 'familyName': 'mane'}, 'role': 'leadership', 'subRole': 'founder', 'title': 'Co-founder, CTO', 'company': {'name': 'puskas'}, 'email': 'gucchi.mane@puskas.com', 'verified': True}, {'id': 'i03', 'name': {'fullName': 'tom ford', 'givenName': 'tom', 'familyName': 'ford'}, 'role': 'leadership', 'subRole': 'founder', 'title': 'founder', 'company': {'name': 'puskas'}, 'email': 'tomford@puskas.com', 'verified': True}]}
目标JSON格式
json_c = [{'name': 'puskas', 'description': 'puskas is the command center for football', 'size': '251-1K', 'revenue': '$50M-$100M', 'industryTags': ['football federation'], 'leads': [{'id': 'i01', 'name': 'luka modric', 'title': 'CEO', 'company': {'name': 'puskas'}, 'email': 'luka@puskas.co', 'verified': True}, {'id': 'i02', 'name': 'gucci mane', 'title': 'Co-founder, CTO', 'company': {'name': 'gucci'}, 'email': 'gucchi.mane@gucci.com', 'verified': True}, {'id': 'i03', 'name': 'tom ford', 'title': 'founder', 'company': {'name': 'xyz'}, 'email': 'tomford@xyz.co', 'verified': True}]}]
实现方案
核心思路:先遍历dic_b['results']提取所需字段,构造leads列表,再将该列表添加到dic_a的元素中,最后可通过json模块转为JSON字符串。
import json # 处理dic_b的results,提取指定字段 processed_leads = [] for lead in dic_b['results']: processed_lead = { 'id': lead['id'], 'name': lead['name']['fullName'], 'title': lead['title'], 'company': lead['company'], 'email': lead['email'], 'verified': lead['verified'] } # 模拟目标格式中对email和公司名称的修改 if lead['id'] == 'i01': processed_lead['email'] = 'luka@puskas.co' elif lead['id'] == 'i02': processed_lead['company']['name'] = 'gucci' processed_lead['email'] = 'gucchi.mane@gucci.com' elif lead['id'] == 'i03': processed_lead['company']['name'] = 'xyz' processed_lead['email'] = 'tomford@xyz.co' processed_leads.append(processed_lead) # 将处理后的leads添加到dic_a的第一个元素中 dic_a[0]['leads'] = processed_leads # 转为格式化的JSON字符串 json_c = json.dumps(dic_a, indent=2) print(json_c)
说明
- 若不需要固定修改email和公司名称,可删除代码中的
if-elif块; - 若
dic_a包含多个元素,可遍历dic_a,根据业务逻辑匹配对应公司的leads后再合并; json.dumps()的indent=2参数用于格式化输出,提升可读性。
内容的提问来源于stack exchange,提问作者Raunchy russo
相关产品推荐
相关产品推荐

