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

2024-04-26 09:38:52 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

有人能帮我吗?你知道吗


Tags: 字典dictddee词典aaccbbb
3条回答

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

查看和其他

Return the intersection of the dictview and the other object as a new set.

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

使所有的键唯一,你就不会有问题的新字典更新从字典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'}

在python3.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())}

对于python2.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'}

相关问题 更多 >