猿问

如何在Python中不循环获取键的值

我有一个 for 循环,我需要在其中分配从另一个字典中获取的新键的值。我试图避免 for 循环中的 for 循环。我的第一本字典如下所示:


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

这是我的for循环:


for index, my_dict in enumerate(data):

    for key, value in my_dict.items():

         new_id = my_dict["sf_id"]

         opportunity = ids[new_id]

以便它获取对应的值。期望的输出是:


print(opportunity)

ID-2522

ID-2523

ID-2524


慕斯709654
浏览 185回答 3
3回答

临摹微笑

假设整个集合中没有重复键,您可以使用reduce将每个 id 字典合并到一个 id 字典中,因此您只需迭代两个集合一次from functools import reduceids = [{'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)

Cats萌萌

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

慕容3067478

# Create a new variable and save sftoap in itnew_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
随时随地看视频慕课网APP

相关分类

Python
我要回答