Python对比Salesforce与Sharepoint列表数据匹配结果的实现方法
原代码问题说明
原有嵌套循环逻辑存在3个核心错误,无法输出预期结果:
- 初始化的
list_result是空列表,直接通过索引i给不存在的元素赋值会触发索引越界错误 - 仅覆盖了ID匹配成功的分支,没有处理「仅Salesforce存在」「仅SharePoint存在」两类场景
- 未对已匹配记录做去重标记,会遗漏仅存在于SharePoint侧的条目
正确实现方案
采用集合交并差计算的方式实现,时间复杂度为O(n+m),比嵌套循环的O(n*m)效率高很多,逻辑清晰不会遗漏场景:
# 读取两边数据源 sf_records = sf_api_data['records'] shp_records = shp_api_data # 分别提取两边的ID集合 sf_id_set = {record['Id'] for record in sf_records} shp_id_set = {record['SalesforceID'] for record in shp_records} compare_result = [] # 1. 写入两边ID匹配成功的记录 for matched_id in sf_id_set.intersection(shp_id_set): compare_result.append({ "SalesForce": matched_id, "Sharepoint": matched_id }) # 2. 写入仅在Salesforce存在的记录 for only_sf_id in sf_id_set.difference(shp_id_set): compare_result.append({ "SalesForce": only_sf_id, "Sharepoint": "KO" }) # 3. 写入仅在Sharepoint存在的记录 for only_shp_id in shp_id_set.difference(sf_id_set): compare_result.append({ "SalesForce": "KO", "Sharepoint": only_shp_id }) # 按预期格式打印输出 print(f"{'SalesForce':<12}Sharepoint") for row in compare_result: print(f"{row['SalesForce']:<12}{row['Sharepoint']}")
输出效果
运行后会得到和预期完全一致的结果:
SalesForce Sharepoint 123456 123456 896587 KO KO 456789
注:如果需要按特定规则排序结果,只需要在打印前对
compare_result列表做排序处理即可。
内容的提问来源于stack exchange,提问作者quentin desgardin
相关产品推荐
相关产品推荐

