繁体   English   中英

比较python中的数据列表

[英]Compare data list in python

我尝试比较 Python 中的两个列表。第一个列表来自 Salesforce Call,另一个来自 Sharepoint 使用 Shareplum 的列表。

来自 Salesforce 的列表格式如下:

    [OrderedDict([('attributes',  OrderedDict([('type', 'FlashS__c'),  ('url', '/services/data/v42.0/sobjects/FlashSale__c/123456')])),  ('Id', '123456'),  ('FlashSaleOpeningDate__c', '2021-10-13T00:00:00.000+0000'),  ('Endofflashsaledate__c', '2021-10-19T21:59:00.000+0000'),  ('ID__c', '350601FR'),  ('Is_Extended__c', False),  ('End_date_after_extension__c', None),  ('FS_Extension__c', None),  ('Stage__c', '5-Planned'),  ('BUGlobal__c', 'fr_FR')])]

[OrderedDict([('attributes',  OrderedDict([('type', 'FlashS__c'),  ('url', '/services/data/v42.0/sobjects/FlashSale__c/896587')])),  ('Id', '896587'),  ('FlashSaleOpeningDate__c', '2021-10-13T00:00:00.000+0000'),  ('Endofflashsaledate__c', '2021-10-19T21:59:00.000+0000'),  ('ID__c', '350601FR'),  ('Is_Extended__c', False),  ('End_date_after_extension__c', None),  ('FS_Extension__c', None),  ('Stage__c', '5-Planned'),  ('BUGlobal__c', 'fr_FR')])]

来自 Sharepoint 的列表格式如下:

[{
'Title': 'en_En - Mon titre - Test - 2022-06-06',
 'Opening Date': datetime.datetime(2022, 6, 6, 2, 0), 
 'Close Date': datetime.datetime(2022, 6, 12, 23, 59), 
 'Country': 'Switzerland', 
 'City': 'Davos', 
 'BU': 'en_En', 
 'ProductType': 'Maj', 
 'MHMT': 'No', 
  'SalesforceID': '123456', 
  'FS Stage': '5-Planned'
  }
{
'Title': 'en_En - Mon titre 2 - Test 2 - 2022-06-06',
 'Opening Date': datetime.datetime(2022, 6, 6, 2, 0), 
 'Close Date': datetime.datetime(2022, 6, 12, 23, 59), 
 'Country': 'Switzerland', 
 'City': 'Davos', 
 'BU': 'en_En', 
 'ProductType': 'Maj', 
 'MHMT': 'No', 
  'SalesforceID': '456789', 
  'FS Stage': '5-Planned'
  }

]

我想循环并查找其他列表中的行是否匹配。 我想在这样的新列表中注册结果:

SalesForce Sharepoint
123456     123456
896587     KO
KO         456789

我尝试这样做:

list_result = []

for i in range(len(sf_api_data['records'])):
    for j in range(len(shp_api_data)):
        if sf_api_data['records'][i]['Id'] == shp_api_data[j]['SalesforceID']:
            if sf_api_data['records'][i]['Id'] not in list_result:
                list_result[i]['Salesforce'] = sf_api_data['records'][i]['Id']
                list_result[i]['Sharepoint'] = shp_api_data[j]['SalesforceID']

print(list_result)

sf_api_data['records']是 Salesforce 列表

shp_api_data是 Sharepoint 列表

你有想法吗?

谢谢

构建两个 ID 的集合:

sf_ids = {r['SalesforceID'] for r in sf_api_data['records']}
shp_ids = {r['Id'] for r in shp_api_data}

然后你可以得到它们的交集和不同点:

print("SalesForce Sharepoint")
for i in sf_ids & shp_ids:
    print(f"{i:<10} {i}")
for i in sf_ids - shp_ids:
    print(f"{i:<10} KO")
for i in shp_ids - sf_ids:
    print(f"KO         {i}")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM