给定两个字典列表,一个是新的,一个是旧的。这些字典表示两个列表中相同的对象。
我需要找出它们之间的差异,并生成一个新的字典列表,其中只包含新字典中的对象和旧字典中更新过的属性。
例如:
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
匹配。所以Bob将变成Boby,Bill将成为酷哥,Vasya将成为男人。而Elvis必须缺席。给我一个优雅的解决方案。循环迭代的次数越少越好。
有一种方法可以解决这个问题。虽然不是最好的解决方案:
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个项目的列表,这个过程将需要相同的时间。