получить доступ к значению ключа снаружи для l oop, когда значение ключа в l oop равно ключу Python - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть два списка словарей:

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}]

Мне нужно от l oop до 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]

Дает мне ошибку, потому что я ясно нужно l oop через sftoap но не хочу иметь вложенные циклы. Мой желаемый результат будет:

print(ap_opp_id)
ID-2522
ID-2524

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Вы можете реорганизовать свой список словарей sftoap в словарь, чтобы избежать вложенности l oop. например:

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
1 голос
/ 30 апреля 2020

Если вы хотите избежать вложенного l oop, вы можете создать словарь из sftoap перед вводом l oop, например:

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

Таким образом, вы можете использовать ap_opp_id = sftoap_dict[id] в оригинале l oop.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...