给出两个字典列表,新的和旧的。字典表示这两个列表中的相同对象。 我需要找到差异,并产生新的词典列表,其中只有来自新词典的对象和来自旧词典的更新属性。
例子:匹配词典集。最好的解决方案。 Python
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'
},
]
所以..在那个例子我想产生新的列表,其中将从list_new唯一的新同性恋者与更新的数据。匹配id
。所以Bob会变成Boby,Bill会变成同性恋,Vasya变成 - 男人。终结猫王必须缺席。
给我一个优雅的解决方案。用较少的迭代循环量。
有办法解决这个问题。哪个不是最好的:
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个物品的清单,则该过程将需要相同的时间。
只是想知道为什么你拼写'家伙''同性恋'? – DTing 2011-03-09 21:49:08
请让猫王逗留:) – 2011-03-09 21:49:42
您是否从某处检索此列表?你可以使用__id__作为字典的关键字重构字典列表吗? – 2011-03-09 21:51:44