为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕斯709654 2022-11-01 17:14:32
我有一个 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-2522ID-2523ID-2524
查看完整描述

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)


查看完整回答
反对 回复 2022-11-01
?
Cats萌萌

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


查看完整回答
反对 回复 2022-11-01
?
慕容3067478

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


查看完整回答
反对 回复 2022-11-01
  • 3 回答
  • 0 关注
  • 184 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号