Python 迭代字典列表并通过比较两个列表创建结果集

Python 迭代字典列表并通过比较两个列表创建结果集,python,list,dictionary,Python,List,Dictionary,我们有以下格式的两个列表: list_A = [ {u'salary': 11, u'id': 1, u'name': u'adam'}, {u'salary': 22, u'id': 2, u'name': u'ben'}, {u'salary': 33, u'id': 3, u'name': u'charles'} ] list_B = [ {u'salary': 101, u'id': 1, u'name': u'adam'}, {u'salary

我们有以下格式的两个列表:

list_A = [
    {u'salary': 11, u'id': 1, u'name': u'adam'},
    {u'salary': 22, u'id': 2, u'name': u'ben'},
    {u'salary': 33, u'id': 3, u'name': u'charles'}
]

list_B = [
    {u'salary': 101, u'id': 1, u'name': u'adam'},
    {u'salary': 44, u'id': 4, u'name': u'david'}
]
如果两者都相同,如何获取id,然后从列表B中选择

res = [
    {u'salary': 101, u'id': 1, u'name': u'adam'},
    {u'salary': 22, u'id': 2, u'name': u'ben'},
    {u'salary': 33, u'id': 3, u'name': u'charles'},
    {u'salary': 44, u'id': 4, u'name': u'david'}
]
我尝试了一个
for
循环,在B中的列表a上迭代检查元素并附加到空列表
res
,但未能达到预期的结果

id是唯一的元素。
列表A是旧的,列表B是新的,所以我们必须将列表B附加到列表A,覆盖其他元素,在这种情况下,Adam的薪资将更新

您可以将数据放入字典,并使用该方法进行必要的更改

list_A = [
    {u'salary': 11, u'id': 1, u'name': u'adam'},
    {u'salary': 22, u'id': 2, u'name': u'ben'},
    {u'salary': 33, u'id': 3, u'name': u'charles'}
]

list_B = [
    {u'salary': 101, u'id': 1, u'name': u'adam'},
    {u'salary': 44, u'id': 4, u'name': u'david'}
]

data = {d['id']: d for d in list_A}
new_data = {d['id']: d for d in list_B}

data.update(new_data)

res = list(data.values())
使用字典:

by_id = {d['id']: d for d in list_A}
by_id.update({d['id']: d for d in list_B})
通过使用惰性生成器,可以避免创建第二个字典:

by_id.update((d['id'], d) for d in list_B)

您的结果列表不应该只有Adam吗?您的
id
值在这两个列表中都是唯一的吗?然后将列表转换为字典。不,这里的目标是-列表A是旧的,列表B是新的,因此我们必须将列表B附加到列表A,覆盖公共元素,在这种情况下,Adam的工资会更新,是的,id是唯一的。这是否回答了您的问题?