合并python中的两个词典,列表为值

时间:2015-08-21 13:26:01

标签: python dictionary

我有两个字典,其中列表为其值 我想合并它们保留列表中的唯一项目 我所知道的是:

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']}

实现这一目标的最有效方法是什么?

1 个答案:

答案 0 :(得分: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}