给定两个字典列表,新的和旧的。字典在两个列表中表示相同的对象。
我需要找到差异并生成新的字典列表,其中仅包含新字典中的对象和旧字典中的更新属性。
例子:
list_new=[
{ 'id':1,
'name':'bob',
'desc': 'cool guy'
},
{ 'id':2,
'name':'Bill',
'desc': 'bad guy'
},
{ 'id':3,
'name':'Vasya',
'desc': None
},
]
list_old=[
{ 'id':1,
'name':'boby',
'desc': 'cool guy',
'some_data' : '12345'
},
{ 'id':2,
'name':'Bill',
'desc': 'cool guy',
'some_data' : '12345'
},
{ 'id':3,
'name':'vasya',
'desc': 'the man',
'some_data' : '12345'
},
{ 'id':4,
'name':'Elvis',
'desc': 'singer',
'some_data' : '12345'
},
]
在该示例中,我想生成新列表,其中只有 list_new 中的新人具有更新的数据。匹配者id
。所以鲍勃将成为博比,比尔将成为科尔人,瓦西娅将成为 - 男人。最终猫王必须缺席。
给我一个优雅的解决方案。迭代循环量较少。
有办法,我解决了。哪个不是最好的:
def match_dict(new_list, old_list)
ids_new=[]
for item in new_list:
ids_new.append(item['id'])
result=[]
for item_old in old_medias:
if item_old['id'] in ids_new:
for item_new in new_list:
if item_new['id']=item_old['id']
item_new['some_data']=item_old['some_data']
result.append(item_new)
return result
我之所以怀疑,是因为循环里有循环。如果列表包含 2000 个项目,则该过程将花费相同的时间。