2013-05-13 146 views
3

我有兩個詞典。 dict1和dict2。字典2的長度始終相同,但dict1的長度不同。這兩個字典如下:檢查具有相似鍵但不同值的兩個詞典

dict2 = {"name":"martin","sex":"male","age":"97","address":"blablabla"} 

dict1 = {"name":"falak", "sex":"female"} 

我想創建基於dict1和dict2的第三個字典。 dict3將具有dict2的所有值。但是所有這些密鑰將被替換爲dict1中存在的密鑰。這是由此產生的字典3

dict3 = {"name":"falak","sex":"female","age":"97","address":"blablabla"} 

我可以做多少如果語句,但希望有一種更聰明的方式。可以請某人指導我。

回答

11

你試過:

dict3 = dict(dict2, **dict1) 

或者:

dict3 = dict2.copy() 
dict3.update(dict1) 
+0

感謝您的幫助。那就是我想要的。但只是將dict1改爲ImmutableMultiDict。並具有以下格式的值ImmutableMultiDict([('name',u'falak'),('sex',u'female')])如果我遇到這種情況,該怎麼辦? – hjelpmig 2013-05-13 14:52:14

+0

@ yasra002'dict(dict2,** {k:dict1.getlist(k)for k in dict1')''? – 2013-05-13 14:56:56

+0

現在生成的字典看起來像那樣。 {「name」:[u'falak'],「sex」:[u'male'],「age」:「97」,「address」:「blablabla」}仍然不是我想要的。我想沒有你的旗幟。我很新的python。如果你能解釋爲什麼這樣做會很感激。 – hjelpmig 2013-05-13 15:07:41

0

python documentation

更新([其它])

  • 使用其他鍵/值對更新字典,覆蓋現有密鑰。
  • 退貨無。
  • update()接受另一個字典對象或鍵/值對的迭代(作爲元組或其他長度爲2的迭代)。如果指定了關鍵字參數,則字典隨後會使用這些鍵/值對進行更新:d.update(red = 1,blue = 2)。
  • 在版本2.4中更改:允許參數爲鍵/值對的迭代並允許關鍵字參數。

所以:

dict1.update(dict2) 
0

首先,您可以添加從D1是在D2中不存在鍵的項目。 d1的所有其他鍵都在d2中。

然後,如果在d1中沒有這樣的關鍵字,則從d2中添加所有來自d2的值,如果d1中存在關鍵字,則從d1中取值。

dict2 = {"name":"martin","sex":"male","age":"97","address":"blablabla"} 
dict1 = {"name":"falak", "sex":"female"} 

dic = dict() 

for key, val in dict1.items(): 
    if key not in dict2.keys(): 
    dic[key] = val 

for key, val in dict2.items(): 
    if key not in dict1.keys(): 
    dic[key] = val 
    else: 
    dic[key] = dict1[key] 
1
import copy 
dict3 = copy.copy(dict2) 
dict3.update(dict1) 
相關問題