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



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

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循环,迭代列表 A 在 B 中的检查元素并附加到空列表res,但无法达到预期的结果。

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

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

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)

最新更新