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是唯一的。这是否回答了您的问题?