当key在循环中的值等于key时,在for循环外访问key的值。

问题描述 投票:0回答:2

我有两个字典列表。

sftoap = [{'0060z000023GQYKAA4': 'ID-2522'}, 
{'0060z000023GQZNAA4': 'ID-2523'}, 
{'0060z000023GQidAAG': 'ID-2524'}]

opp_products = [{'Opportunity_ID__c': '0060z000023GQYKAA4', 'TotalPrice': 50408.22991509}, 
{'Opportunity_ID__c': '0060z000023GQZNAA4', 'TotalPrice': 50408.22991509},
{'Opportunity_ID__c': '0060z000023GQighTY', 'TotalPrice': 50408.22991509}]

我需要循环浏览 opp_products 并将一个键的值从 sftoap 字典列表到一个新的变量中。但只有当'Opportunity_ID__c'的值等于来自于 sftoap

这是我试过的。

for index, opp_products_dict in enumerate(opp_products):
    for opp_products_key, opp_products_value in opp_products_dict.items():
        id = opp_products_dict["Opportunity_ID__c"]
        ap_opp_id = sftoap[id]

给了我一个错误,因为我很明显地需要循环通过... ... sftoap 但不想有嵌套循环。我想要的输出是。

print(ap_opp_id)
ID-2522
ID-2524
python dictionary for-loop mapreduce
2个回答
1
投票

如果你想避免嵌套循环,你可以从以下地方创建一个字典 sftoap 在你进入循环之前,像这样。

sftoap_dict = {}
for d in sftoap:
    key, value = d.popitem()
    sftoap_dict[key] = value

这样你就可以用 ap_opp_id = sftoap_dict[id] 在你原来的循环中。


1
投票

你可以将你的sftoap字典列表重新组织成一个字典,以避免嵌套循环.例如。

sftoap_dict = {}
for dicts in sftoap:
    for key,val in dicts.items():
        sftoap_dict[key]=val

接下来,你可以在你的代码的第二部分中加入异常

 for index, opp_products_dict in enumerate(opp_products):
    for opp_products_key, opp_products_value in opp_products_dict.items():
        idx = opp_products_dict["Opportunity_ID__c"]
        try:
            ap_opp_id = sftoap_dict[idx]
            print(ap_opp_id)
        except KeyError:
            pass
© www.soinside.com 2019 - 2024. All rights reserved.