給出兩個字典列表,新的和舊的。字典表示這兩個列表中的相同對象。 我需要找到差異,併產生新的詞典列表,其中只有來自新詞典的對象和來自舊詞典的更新屬性。
例子:匹配詞典集。最好的解決方案。 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