2015-08-21 107 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

相关问题