Given two lists of dictionaries, new one and old one. Dictionaries represent the same objects in both lists.
I need to find differences and produce new list of dictionaries where will be objects from new dictionaries only and updated attributes from old dictionaries.
Example:
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'},]
In that example I want produce new list where will be only new guys from list_new with updated data. Matched by id
. So Bob will become Boby, Bill will become coll guy, Vasya become - the man. End Elvis have to be absent.
Give me an elegant solution. With less amount of iteration loops.
There is way, I resolve that. Which is not the best:
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
The reason why I'm doubt, because there is loop inside loop. If there will be lists of 2000 items the process would take same time.