Python 从另一个字典列表更新字典列表

Python 从另一个字典列表更新字典列表,python,Python,输出: list1 = [ {"code": 1, "a": 7, "b": 9, "c": 24}, {"code": 2, "a": 78, "b": 12, "c": 45}, {"code": 3, "a": 3, "b": 5, "c&

输出:

list1 = [
    {"code": 1, "a": 7, "b": 9, "c": 24},
    {"code": 2, "a": 78, "b": 12, "c": 45},
    {"code": 3, "a": 3, "b": 5, "c": 16}
]
list2=[
    {"code": 1, "a": 45, "b": 21, "c": 24},
    {"code": 2, "a": 84, "b": 7, "c": 55}
]
我需要根据
list2
使用相同的键
“code”
更新
list1
。 我试过:


但它不起作用。

与任何查找问题一样,字典是你的朋友。将列表转换为由代码键入的内容:

update_mapping = {k["code"]: k for k in list2}
list1 = [update_mapping.get(k["code"], k) for k in list1]
字典在Python3.6+中是按顺序排列的,并且
update
保留键顺序,因此这将非常有效。对于以前的版本,请使用
collections.OrderedDict
(在Python 3.6+中仍然可用):


假设列表的顺序正确,另一种解决方案是简单地迭代列表1中的每个项目,并使用列表2中的相应项目更新它:

from collections import OrderedDict

d1 = OrderedDict((d['code'], d) for d in list1)
d2 = OrderedDict((d['code'], d) for d in list2)
d1.update(d2)
list1 = list(d1.values())

还请记住,“Mad”在python 3.6的字典中提到的插入顺序——“但它不会工作”并不构成有效的问题陈述。您可以使用不同的数据结构吗?
k[“Case”]
似乎是一个非常明确的输入错误,也许它们不应该是列表
codedict1={1:{a':7,'b':9,'c':24},2:{a':78,'b':12,'c':45},3:{a':3,'b':5,'c':16}
codedict2={1:{a':45,'b':21,'c':24},2:{a':84,'b':7,'c':55}
将更容易处理。请查看任何缺少的元素都会使您的方法无效
d1 = {d['code']: d for d in list1}
d2 = {d['code']: d for d in list2}
d1.update(d2)
list1 = list(d1.values())
from collections import OrderedDict

d1 = OrderedDict((d['code'], d) for d in list1)
d2 = OrderedDict((d['code'], d) for d in list2)
d1.update(d2)
list1 = list(d1.values())
for item_1, item_2 in zip(list1, list2):
    item_1.update(item_2)