首页 > 解决方案 > 在 Python 中访问嵌套字典以在 for 循环中进行比较

问题描述

我正在尝试访问嵌套字典值以与另一个字典的键值进行比较。我有两个字典列表。如下所示:

params = [{'nUID': '39', 'Query': [{'MaxRecords': '40', 'OrderName': 'Forecast Placeholder - 1005', 'CustomerID': '15283'}]}]

response = [{
    'OrderID': 1028,
    'Name': 'Forecast Placeholder - 1005',
    'CustomerID': 1127}]

我需要比较OrderName参数和Name响应的值。这是我尝试过的:

adpoint_key = "AdPoint_Id__c"
for index, my_dict in enumerate(test_data):
    if my_dict['DBU_Key__c'] != "AUT" and my_dict["AdPoint_Sync_Conditions__c"] != '"' and adpoint_key in my_dict.keys():
        my_dict["OpportunityID"] = my_dict["AdPoint_Id__c"]
        my_dict["CustomerID"] = my_dict["AdPoint_Customer_Id__c"]

        params = []
        params_dict = {}
        params_dict["nUID"] = "39"
        params_dict["Query"] = []
        new_dict = {} 
        new_dict["MaxRecords"] = "40"
        new_dict["OrderName"] = "Forecast Placeholder - " + my_dict["OpportunityID"]
        new_dict["CustomerID"] = my_dict["CustomerID"]
        params_dict["Query"].append(new_dict)
        params.append(params_dict)
#         print(params)

        response = client.service.GetOrders(**params[0]))

        results = []
        for a, b in zip(params, response):
            if b[0]['Name'] == a['Query'][0]['OrderName']:
                results.append(response_dict)
                print(results)

错误:TypeError: string indices must be integers

标签: python

解决方案


这是一种方法。首先,创建paramsresponse按照原始帖子。请注意,它params包含嵌套的字典,并response包含平面字典。

# original data
params = [{'nUID': '39', 
           'Query': [{'MaxRecords': '40', 
                      'OrderName': 'Forecast Placeholder - 1005', 
                      'CustomerID': '15283'}]}]
response = [{
    'OrderID': 1028,
    'Name': 'Forecast Placeholder - 1005',
    'CustomerID': 1127}]

现在使用 zip 遍历列表(即参数、响应)。

results = list()

for p, r in zip(params, response):
    # use .get() for dictionary look-ups, to to emphasize dict vs list access
    if p.get('Query')[0].get('OrderName') == r.get('Name'):
        results.append(r)
        
print(results)
[{'OrderID': 1028, 'Name': 'Forecast Placeholder - 1005', 'CustomerID': 1127}]


推荐阅读