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

我有两个列表是


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

print(new_list)

因为我使用 2' 次迭代器来实现这个问题,我认为这太慢了,而且是非 Python 风格,而且我引入了看起来不太好的新标志。有没有更直接、更方便、更有效的方式来实现它


桃花长相依
浏览 187回答 2
2回答

繁星coding

您可以创建一个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_listold_tags = {i['tag']: i['value'] for i in old_list}# update new_list with old_list values if presentfor 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}]

慕尼黑8549860

使用包含字典理解的列表理解,并使用条件: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。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python