2014-09-05 56 views
-1

我有兩個字典,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())) 
+0

你爲什麼想把它塞進一行?採取一些,它會變得更簡單。 – jonrsharpe 2014-09-05 15:53:50

+0

使用'set'類。創建一個包含'A.keys()'的集合,另一個包含'B.keys()'的集合。 'set'應該有一個區別方法 – SomethingSomething 2014-09-05 15:55:34

+0

@ user3322273這正是OP已經在做的事情 – jonrsharpe 2014-09-05 16:08:04

回答

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

這是可以做到這樣的:

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

之前,你說這是不是一條線,我會說這是相當的可讀性和你想要做什麼。

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))) 
2

也許工會嗎?

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