2014-02-25 54 views
0

鍵值對我有兩個詞典:比較兩個字典並打印在python

a= { "fruits": ["apple", "banana"] } 
b = { "fruits": ["apple", "carrot"]} 

現在我想打印的差異。我想 在這種情況下,輸出應爲

{'fruits' : 'carrot'} 

也鑰匙是否已經改變 - 假設,如果變爲

b = { "toy": "car"} 

那麼輸出應該是

{ "toy": "car"} 

提前致謝。

+0

你實際上不能擁有這些字典。字典不能像那樣工作。 – user2357112

+0

你是否也希望「蔬菜」被打印出來,因爲它是「b」中不存在的「a」中的一個鍵? – jayelm

+1

這是無效的'a = {'fruits':'apple''grape','vegetables':'carrot'}' –

回答

3

看起來好像dict.viewitems可能是一個很好的方法來看待。這將使我們能夠輕鬆查看哪些鍵/值對在a不在b

>>> a = { 'fruits': 'apple' 'grape', 'vegetables': 'carrot'} 
>>> b = { 'fruits': 'banana'} 
>>> a.viewitems() - b.viewitems() # python3.x -- Just use `items` :) 
set([('fruits', 'applegrape'), ('vegetables', 'carrot')]) 
>>> b['vegetables'] = 'carrot' # add the correct vegetable to `b` and try again. 
>>> a.viewitems() - b.viewitems() 
set([('fruits', 'applegrape')]) 

我們甚至可以得到什麼真正的區別是,如果我們使用了對稱差的手柄:

>>> a.viewitems()^b.viewitems() 
set([('fruits', 'applegrape'), ('fruits', 'banana')]) 

如果您只想更改哪些鍵,則還可以使用viewkeys(在python3.x上的keys)做類似的事情。

+0

非常感謝! viewitems對我有很大的幫助:) – user3349548

1

至於差別,您可以使用字典解析僅過濾b密鑰,其在a

>>> {key: b[key] for key in b if key in a} 
{'fruits': 'banana'} 

到第二部分,「如果鍵已經改變」,{'froot'} ISN是一個有效的字典,而且鍵是不可變的。所以這是不可能的。