给出了两份字典清单,新的和旧的。词典在两个列表中表示相同的对象。
我需要找出差异并生成新的词典列表,其中只有新词典中的对象和旧词典中的更新属性。
示例:list_new=[
{ 'id':1,
'name':'bob',
'desc': 'cool gay'
},
{ 'id':2,
'name':'Bill',
'desc': 'bad gay'
},
{ 'id':3,
'name':'Vasya',
'desc': None
},
]
list_old=[
{ 'id':1,
'name':'boby',
'desc': 'cool gay',
'some_data' : '12345'
},
{ 'id':2,
'name':'Bill',
'desc': 'cool gay',
'some_data' : '12345'
},
{ 'id':3,
'name':'vasya',
'desc': 'the man',
'some_data' : '12345'
},
{ 'id':4,
'name':'Elvis',
'desc': 'singer',
'some_data' : '12345'
},
]
所以。。在那个例子中,我想产生一个新的列表,其中将只有来自列表的新同志新的更新数据。由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个项目的清单,这个过程将需要同样的时间。