2015-08-21 152 views
1

我有兩個詞典以列表作爲其值。
我想合併它們,保留列表中的唯一項。
我所知道的是:在Python中將兩個詞典合併爲列表作爲值

d1 = {'a':['aa','bb']} 
d2 = {'a':['aa','cc'],'b':['xx','yy']} 
d1.update(d2) 
print d1 
>>> {'a': ['aa', 'cc'], 'b': ['xx', 'yy']} 

雖然我想

>>> {'a': ['aa', 'bb', 'cc'], 'b': ['xx', 'yy']} 

什麼是實現這一目標的最有效的方法是什麼?

+9

因此,在本質上,你的價值觀應該是*套*,名單沒有,因爲你只保留獨特的元素。 –

+0

確定順序嗎? –

+0

Padraic坎寧安沒有它不 – user3399516

回答

4

使用裝置,而非列表:

{k: set(d1.get(k, [])) | set(d2.get(k, [])) for k in d1.viewkeys() | d2} 

爲您的樣品輸入此生產:

>>> d1 = {'a':['aa','bb']} 
>>> d2 = {'a':['aa','cc'],'b':['xx','yy']} 
>>> {k: set(d1.get(k, [])) | set(d2.get(k, [])) for k in d1.viewkeys() | d2} 
{'a': set(['aa', 'cc', 'bb']), 'b': set(['yy', 'xx'])} 

,如果你改變了你的輸入字典中使用集合的價值觀太這會更容易些。

如果你必須有名單和順序並不重要,轉換套回列表:

{k: list(set(d1.get(k, [])) | set(d2.get(k, []))) for k in d1.viewkeys() | d2} 
+0

有沒有在第二個字典中調用'.viewkeys()'的任何一點? –

+2

@PadraicCunningham:沒有;除去。 –

+0

@MartijnPieters謝謝你。如果我對輸入字典使用集合,例如d1 = {'a':set(['aa','bb'])},那麼它將如何工作? – user3399516

相關問題