我有两个字典,其中列表为其值 我想合并它们保留列表中的唯一项目 我所知道的是:
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']}
实现这一目标的最有效方法是什么?
答案 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}