gpt4 book ai didi

python - 如何使用另一个词典列表更新词典列表?

转载 作者:太空宇宙 更新时间:2023-11-03 14:42:27 25 4
gpt4 key购买 nike

我有两个列表,如下所示。我想使用旧列表更新新列表。更新新列表的条件是旧列表中 name 的匹配值。最好的方法是什么?

输入

old_list = [{'age': 35, 'name': 'james'}, {'age': 42, 'name': 'bob'}]

new_list = [{'name': 'peter'}, {'name': 'james'}, {'age': 50, 'name': 'bob'}]

预期输出

[{'name': 'peter'}, {'age': 35, 'name': 'james'}, {'age': 42, 'name': 'bob'}]

编辑:添加我的解决方案

我知道的一个解决方案是使用多个循环和 if 条件来解决这个问题。它不是完整的解决方案,因为我需要处理多种情况,例如 key 不存在等。

for x in new_col_list:
for y in old_col_list:
if x['name'] == y['name']:
x['age'] = y['age']
continue

print new_col_list

最佳答案

您需要一种结构,允许您从一个列表中查找另一个列表中的项目。字典提供了这样的结构:

lookup = {x['name']: x for x in new_list}
lookup.update({x['name']: x for x in old_list})

如果你真的想,你可以转换回列表:

result = list(lookup.values())

在 Python 3.6+ 中,值的顺序将是新列表的所有元素,然后是从旧列表中添加的所有缺失元素,这些元素按照它们在旧列表中的顺序添加。对于旧版本的 Python,同样可以通过 collections.OrderedDict 实现:

lookup = OrderedDict((x['name'], x) for x in new_list)
lookup.update((x['name'], x) for x in old_list)

如果没有排序,dict.values() 的结果将是任意顺序,并且可能会在解释器的运行之间发生变化。

附录

任何时候你看到字典理解,它在功能上等同于 for 循环。这是第一个建议代码的“扩展”版本:

lookup = {}
for d in new_list:
lookup[d['name']] = d
for d in old_list:
lookup[d['name']] = d

关于python - 如何使用另一个词典列表更新词典列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52311560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com