3 回答

TA貢獻1982條經驗 獲得超2個贊
假設整個集合中沒有重復鍵,您可以使用reduce將每個 id 字典合并到一個 id 字典中,因此您只需迭代兩個集合一次
from functools import reduce
ids = [{'1020': 'ID-2522'}, {'1030': 'ID-2523'}, {'1040': 'ID-2524'}]
data = [{'sf_id': '1020', 'TotalPrice': '504'}, {'sf_id': '1030', 'TotalPrice': '400'}, {'sf_id': '1040', 'TotalPrice': '500'}]
ids_map = reduce(lambda x, y: x.update(y) or x , ids, {})
for my_dict in data:
new_id = my_dict["sf_id"]
opportunity = ids_map[new_id]
print(opportunity)

TA貢獻1805條經驗 獲得超9個贊
ids是字典列表,而不是字典。這使得查找其中一個鍵的效率非常低,因為您必須遍歷整個列表才能找到它。
因此,第一步是將所有這些小字典合并成一個大字典。
然后,我們可以使用您的預期輸出有效地構建一個列表:
ids = [{'1020': 'ID-2522'}, {'1030': 'ID-2523'}, {'1040': 'ID-2524'}]
data = [{'sf_id': '1020', 'TotalPrice': '504'},
{'sf_id': '1030', 'TotalPrice': '400'},
{'sf_id': '1040', 'TotalPrice': '500'}]
ids_dict = {k:v for dct in ids for k, v in dct.items()}
opportunity = []
for my_dict in data:
new_id = my_dict["sf_id"]
opportunity.append(ids_dict[new_id])
print(opportunity)
# ['ID-2522', 'ID-2523', 'ID-2524']
(注意enumerate如果不使用索引就不需要)
或者,更短的,使用列表理解:
opportunity = [ids_dict[my_dict["sf_id"]] for my_dict in data]
print(opportunity)
# ['ID-2522', 'ID-2523', 'ID-2524']

TA貢獻1773條經驗 獲得超3個贊
# Create a new variable and save sftoap in it
new_ids = ids
# pop the items from original list of dicts and save it in a new dict
sftoap_dict = {}
for d in new_ids:
key, value = d.popitem()
sftoap_dict[key] = value
添加回答
舉報