python - 在 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
解决方案
这是一种方法。首先,创建params
并response
按照原始帖子。请注意,它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}]
推荐阅读
- triggers - 如何使用触发器获取选项列表值中的存储数据?
- sql-server - 如何在 Linux 上跨可用性组副本同步 SQL Server 代理作业?
- ios - invalidateLayout() 和 reloadData() 之间的区别
- visual-studio-code - Visual Studio Code 无法在 macOS Catalina 上安装扩展:文件权限被拒绝
- azure - 如何使用 terraform 将 AKS 主日志发送到 eventthub?
- c# - 通过 SftpClient 下载后,某些大的“.xlsx”扩展文件无法打开
- postgresql - Restful GET 端点 - 巨大的响应数据导致性能不佳
- cmd - 如何在 CMD Windows 10 中以 60 秒的持续时间 ping
- javascript - 为什么我的 javascript 函数是堆叠的?
- google-apps-script - 用于设置形状颜色的 Google Apps 脚本