2017-06-06 83 views
0

可以說我有兩個詞典與每個鍵多個值:合併多功能使用值字典

Dict1 = { key1 : [value1,value2] } 
Dict2 = { key1 : [value3,value4], key2 : [value5,value6]} 

我想將它們合併成一個字典是這樣的:

mergedDict = { key 1 : [value1,value2,value3,value4], key 2 : [0,0,value5,value6] } 
+1

可能重複https://stackoverflow.com/questions/38987/how-to-merge-two-python-字典在單一表達 – user3764893

+0

你有沒有嘗試任何代碼? – thavan

+0

重複值如何?如果Dict1中的key1的值爲1,Dict2中的key1的值爲1,那麼回覆的字典中key1的值有兩次出現,或者只有一次? –

回答

2

嚕p並鍵,並使用dict.get,默認值爲[0, 0]

>>> dict1 = {'key1' : [1, 2]} 
>>> dict2 = {'key1' : [3, 4], 'key2' : [5, 6]} 
>>> 
>>> {k:dict1.get(k, [0, 0]) + dict2.get(k, [0, 0]) for k in dict1.viewkeys() | dict2.viewkeys()} 
{'key2': [0, 0, 5, 6], 'key1': [1, 2, 3, 4]} 
+0

謝謝你的答案,我會接受它只是測試它。還有一個要求我們可以爲兩個以上的字典做這件事嗎?像四個? –

+0

作品像一個魅力好友,我們可以做兩個以上的字典嗎? –

+0

@MohsinKhalid是的,但是接下來我們需要一個更清晰的規則如何填充應該工作。當一個字典中缺少一個密鑰時,總是兩個零? – timgeb

1

這應該這樣做,並涵蓋Dict1其鍵是Dict2沒有的possibity:

Dict1 = {'key1': ['value1', 'value2'], 'key3': ['value7', 'value8']} 
Dict2 = { 'key1' : ['value3','value4'], 'key2' : ['value5', 'value6']} 

mergedDict = {k: [0, 0] + v if k not in Dict1 else Dict1[k] + v for k, v in Dict2.items()} 
mergedDict.update({i: j + [0, 0] for i, j in Dict1.items() if i not in Dict2}) 
#{'key3': ['value7', 'value8', 0, 0], 'key2': [0, 0, 'value5', 'value6'], 'key1': ['value1', 'value2', 'value3', 'value4']} 
+0

我提供了針對特定情況的解決方案嗎?那有什麼問題? – zipa

0

嘗試用defaultdict

from collections import defaultdict 
dict1 = { 'key1' : ['value1','value2'] } 
dict2 = { 'key1' : ['value3','value4'], 'key2' : ['value5','value6']} 
dict3 = defaultdict(list) 
for d1, d2 in dict1.items() + dict2.items(): 
    dict3[d1].extend(d2) 
dict(dict3) #convert defaultdict to dict 

輸出:

{'key1': ['value1', 'value2', 'value3', 'value4'], 
'key2': ['value5', 'value6']} 
+0

不產生預期結果。 – timgeb

+0

@timgeb感謝您的指出,更新。 –

+0

仍然不會產生預期的輸出。當一個密鑰丟失時,OP希望用零填充。 – timgeb