合并两个词典的一部分以创建一个新词典

时间:2015-08-11 01:58:59

标签: python dictionary merge

我想知道如何合并两个词典来创建一个新词典。假设我有两个词典:

    a = {'aa' : 'aaa', 'bb' : 'bbb', 'cc' : 'ccc'}
    b = {'aa' : '111', 'bb' : '222', 'dd' : '444', 'ee' : '555'}

我想创建第三个字典,使用a和b中包含的键,但我希望值来自dict a。所以它看起来像这样:

   c = {'aa' : 'aaa', 'bb' : 'bbb'}

任何人都可以帮我吗?

3 个答案:

答案 0 :(得分:2)

对于python2,只需使用dict.viewkeys查找dict键的交集:

dictview&其他

  

将dictview和另一个对象的交集作为新集返回。

a = {'aa' : 'aaa', 'bb' : 'bbb', 'cc' : 'ccc'}
b = {'aa' : '111', 'bb' : '222', 'dd' : '444', 'ee' : '555'}

print({k:a[k] for k in a.viewkeys() & b})
{'aa': 'aaa', 'bb': 'bbb'}

对于python3,只需使用返回dictview对象的.keys:

a = {'aa' : 'aaa', 'bb' : 'bbb', 'cc' : 'ccc'}
b = {'aa' : '111', 'bb' : '222', 'dd' : '444', 'ee' : '555'}

print({k: a[k] for k in a.keys() & b})

{'aa': 'aaa', 'bb': 'bbb'}

答案 1 :(得分:0)

在Python 3.x中,我会得到dict.keys()并对它们执行&(交集),以获取公共密钥,然后从a获取值。示例 -

a = {'aa' : 'aaa', 'bb' : 'bbb', 'cc' : 'ccc'}
b = {'aa' : '111', 'bb' : '222', 'dd' : '444', 'ee' : '555'}
c = {}
for k in (a.keys() & b.keys()):
    c[k] = a[k]

字典理解方法 -

c = {k:a[k] for k in (a.keys() & b.keys())}

对于Python 2.7,您可以使用dict.viewkeys()代替dict.keys()方法。

示例/演示 -

>>> a = {'aa' : 'aaa', 'bb' : 'bbb', 'cc' : 'ccc'}
>>> b = {'aa' : '111', 'bb' : '222', 'dd' : '444', 'ee' : '555'}
>>> c = {}
>>> for k in (a.keys() & b.keys()):
...     c[k] = a[k]
...
>>> c
{'aa': 'aaa', 'bb': 'bbb'}

答案 2 :(得分:0)

使所有密钥都是唯一的,并且您不会遇到新字典更新密钥从字典a到字典b的问题。您必须使所有密钥都是唯一的,但如果没有,请查看下面的代码,我在密钥名称中添加1以使其唯一。

a = {'aa' : 'aaa', 'bb' : 'bbb', 'cc' : 'ccc'}
b = {'aa' : '111', 'bb' : '222', 'dd' : '444', 'ee' : '555'}

c = a.copy()

count = 0
for k, v in b.items():
    if a.has_key(k):
        while True:
            count += 1
            if c.has_key(k+str(count)):
                pass
            else:
                c[k+str(count)]=v
                count = 0
                break
    else:
        c[k]=v

print c

{'aa': 'aaa', 'bb': 'bbb', 'cc': 'ccc', 'dd': '444', 'ee': '555', 'aa1': '111', 'bb1': '222'}