2010-05-20 60 views
-1

我有兩個大詞彙表填充字典。如果dict2 == dict1中的一個值,並且將新組合的匹配放在其他地方,我需要合併這些條目。我無法解釋它。合併條目,過濾Python字典

列出一個包含:

{'keyword':value, 'keyword2':value2} 

列出兩種:

{'keyword2':value2, 'keyword3':value3} 

我想用字典,包括關鍵詞1,關鍵詞和KEYWORD3一個新的列表,如果兩個列表共享相同的「關鍵字2」值。什麼是最好的方法來做到這一點?當我嘗試時,我只想出了大量的嵌套for循環。謝謝

+1

我想你使用語言翻譯年齡錯誤。像'{'k1':'v1','k2':'v2'}'是一個「字典」,而不是一個列表;像'k1'這樣的個人成員:'v1'是一個「元素」或「映射」。也許是迂腐,但它會讓你更難理解。 – Etaoin 2010-05-20 07:47:05

+0

如果列表對同一個密鑰有不同的值,會發生什麼?哪一個勝利?或者應該刪除條目或引發異常? – 2010-05-20 08:54:02

回答

0

循環一個字典,將單個元素與其他字典進行比較。與此類似,在那裏dict1dict2的原件,並dict3結果如下:

dict3 = dict1 
for k in dict2: 
    if k in dict1: 
     # The key is in both dictionaries; we've already added dict1's version 
     if dict1[k] != dict2[k]: 
      pass # The dictionaries have different values; handle this as you like 
    else 
     # The key is only in dict2; add it to dict3 
     dict3[k] = dict2[k] 

你是不是你想要的行爲,如果兩個庫有一些關鍵的不同值清晰;用你想做的任何事替換「通行證」。 (書面,它將保持值從dict1。如果你不想爲包括值,與del dict3[k]更換pass。)

2

如果你不關心「衝突」,即相同的密鑰映射到不同的值有兩種類型的字典,您可以使用類型的字典的方法update

>>> d1 = {'keyword': 1, 'keyword2': 2} 
>>> d2 = {'keyword2': 2, 'keyword3': 3} 
>>> d = {} 
>>> d.update(d1) 
>>> d 
{'keyword2': 2, 'keyword': 1} 
>>> d.update(d2) 
>>> d 
{'keyword3': 7, 'keyword2': 2, 'keyword': 1} 

假設你的類型的字典存儲在名爲dict_list大名單:

total = {} 
for d in dict_list: 
    total.update(d) 
+0

OP寫道只有共享值應該在新列表中,所以他確實在意衝突 - 他只是沒有說明程序在這種情況下應該如何表現。 – 2010-05-20 08:55:25