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

如何更自然地获取更新列表而不使用标志

如何更自然地获取更新列表而不使用标志

桃花长相依 2021-09-14 10:07:49
我有两个列表是old_list = [{"tag": "apple","value":4}, {"tag": "orange","value":5}]new_list = [{"tag": "apple","value":1}, {"tag": "orange","value":2}, {"tag": "grape","value":3}]我想要一个new_list,如果 new_listitem['tag']等于 old_list item['tag'],则new_list['value']等于old_list['value'],如果 new_list 有新项目,则new_list['value']初始化 0。结果:new_list = [{"tag": "apple","value":4}, {"tag": "orange","value":5}, {"tag": "grape","value":0}]这是我的实现:old_list = [{"tag": "apple","value":4}, {"tag": "orange","value":5}]new_list = [{"tag": "apple","value":1}, {"tag": "orange","value":2}, {"tag": "grape","value":3}]update_list = []for new in new_list:    flag_new_item = True    for old in old_list:        if new["tag"] == old['tag']:            new["value"] = old['value']            flag_new_item = False            break    if flag_new_item:        new['value'] = 0print(new_list)因为我使用 2' 次迭代器来实现这个问题,我认为这太慢了,而且是非 Python 风格,而且我引入了看起来不太好的新标志。有没有更直接、更方便、更有效的方式来实现它
查看完整描述

2 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

您可以创建一个tagtovalue字典old_list并new_list相应地更新项目:


old_list = [{"tag": "apple","value":4}, {"tag": "orange","value":5}]

new_list = [{"tag": "apple","value":1}, {"tag": "orange","value":2}, {"tag": "grape","value":3}]


# create a dictionary from old_list

old_tags = {i['tag']: i['value'] for i in old_list}


# update new_list with old_list values if present

for item in new_list:

    item['value'] = old_tags.get(item['tag'], 0)


print(new_list)

输出


[{'tag': 'apple', 'value': 4}, {'tag': 'orange', 'value': 5}, {'tag': 'grape', 'value': 0}]



查看完整回答
反对 回复 2021-09-14
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

使用包含字典理解的列表理解,并使用条件:

print([{k:(next(iter(old_list[idx:idx+1]),{}).get(k,0) if k=='value' else v) for k,v in i.items()} for idx,i in enumerate(new_list)])

enumerate首先使用then 循环,然后使用带有值条件的字典理解,并在可能的情况下获取 的值old_list


查看完整回答
反对 回复 2021-09-14
  • 2 回答
  • 0 关注
  • 186 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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