字典差异操作

时间:2014-09-05 15:49:49

标签: python dictionary

我有两个词典,A和B,我想要获取那些键:B中存在但不存在A的值对,并将它们添加到A.我不希望B的值与匹配的键是在A中添加或覆盖。

A = {'one':1, 'two':2}
B = {'one':1, 'two':999, 'three':3}

我希望结果字典看起来像:

A = {'one':1, 'two':2, 'three':3}

我认为答案是这样的,但我无法使价值部分正确。

A.update(dict.fromkeys(set(B).difference(A), B.values()))

4 个答案:

答案 0 :(得分:3)

您可以使用dict.setdefault()

A = {'one':1, 'two':2}
B = {'one':1, 'two':999, 'three':3}

for k,v in B.items():
    A.setdefault(k, v)

print(A)
{'two': 2, 'one': 1, 'three': 3}

答案 1 :(得分:2)

可以这样做:

for key in B:
    if key not in A:
        A[key] = B[key]

在你说它不在同一行之前,我会说它很可读并且做你想要的。

答案 2 :(得分:2)

也许是工会?

>>> A = {'one':1, 'two':2}
>>> B = {'one':1, 'two':999, 'three':3}
>>> dict(B.items() + A.items())
{'one': 1, 'three': 3, 'two': 2}

答案 3 :(得分:1)

你走在正确的轨道上。

使用{} .update()和一组键。凭着词典理解:

>>> A = {'one':1, 'two':2}
>>> B = {'one':1, 'two':999, 'three':3}
>>> A.update({key:B[key] for key in set(B)-set(A)})
>>> A
{'three': 3, 'two': 2, 'one': 1}

dict和生成器表达式:

>>> A.update(dict((key,B[key]) for key in set(B)-set(A)))