技术问询:基于公共字段和国家映射两份Payload数据及提取指定条件下的created_by__v字段列表
嘿,我来帮你搞定这两个数据处理需求,下面是具体的实现思路和代码示例:
需求一:基于公共字段和国家对两份Payload数据进行映射
假设两份Payload都包含公共标识字段(比如document_id__v这类唯一标识)和国家信息(结构类似需求二中的document_country__vr.data),核心思路是先为每份数据建立「公共字段值+国家缩写」的唯一键,再通过这个键将两份数据关联映射。
举个具体的示例,假设我们有以下两份测试Payload:
# 第一份Payload(示例) payload1 = { "data": [ {"document_id__v": "DOC001", "document_country__vr": {"data": [{"abbreviation__c": "CN"}]}, "field1": "value1"}, {"document_id__v": "DOC002", "document_country__vr": {"data": [{"abbreviation__c": "US"}]}, "field1": "value2"} ] } # 第二份Payload(示例) payload2 = { "data": [ {"document_id__v": "DOC001", "document_country__vr": {"data": [{"abbreviation__c": "CN"}]}, "field2": "valueA"}, {"document_id__v": "DOC002", "document_country__vr": {"data": [{"abbreviation__c": "US"}]}, "field2": "valueB"} ] }
实现映射的Python代码如下:
def map_payloads_by_common_field_and_country(payload_a, payload_b, common_field): # 为第一份数据构建映射字典:键为(公共字段值, 国家缩写),值为对应的数据对象 payload_a_map = {} for item in payload_a["data"]: # 提取国家缩写(这里假设每个对象的国家列表只有一个元素,可根据实际调整) country_abbr = item["document_country__vr"]["data"][0]["abbreviation__c"] key = (item[common_field], country_abbr) payload_a_map[key] = item # 遍历第二份数据,匹配映射并合并字段 mapped_results = [] for item in payload_b["data"]: country_abbr = item["document_country__vr"]["data"][0]["abbreviation__c"] key = (item[common_field], country_abbr) if key in payload_a_map: # 合并两份数据的字段,你可以根据需求自定义合并逻辑 merged_item = {**payload_a_map[key], **item} mapped_results.append(merged_item) return mapped_results # 调用函数,传入公共字段名称 final_result = map_payloads_by_common_field_and_country(payload1, payload2, "document_id__v") print(final_result)
如果你的Payload中每个对象关联多个国家,可以调整逻辑,比如遍历所有国家分别建立映射,或者只处理符合特定条件的国家。
需求二:提取满足条件的字段组成字符串列表
针对你提供的具体Payload,我们需要遍历每个数据对象,检查其关联的国家缩写是否为CN,如果符合条件就提取created_by__v字段并转为字符串,最终组成列表。
直接上实现代码:
# 你提供的原始Payload数据 target_payload = {"data": [{"created_by__v": 2447129, "document_country__vr": {"responseDetails": {"limit": 250}, "data": [{"name__v": "China", "abbreviation__c": "CN"}]}, "version_modified_date__v": "2020-11-30T06:33:41.000Z"} ]} def extract_target_created_by(payload): created_by_str_list = [] for item in payload["data"]: # 遍历当前对象的所有国家信息(兼容多个国家的情况) for country_info in item["document_country__vr"]["data"]: if country_info["abbreviation__c"] == "CN": # 将数值型的created_by__v转为字符串后加入列表 created_by_str_list.append(str(item["created_by__v"])) # 如果每个对象只需要匹配一次CN,这里可以添加break跳出循环 break return created_by_str_list # 调用函数获取结果 result_list = extract_target_created_by(target_payload) print(result_list) # 输出: ['2447129']
这段代码考虑了document_country__vr.data包含多个国家的场景,会逐个检查,只要有一个国家缩写为CN就提取对应的字段。如果你的场景中每个对象只会关联一个国家,也可以简化成直接取第一个国家元素进行判断。
内容的提问来源于stack exchange,提问作者bala krishna
相关产品推荐
相关产品推荐

