2014-02-25 53 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是一个有效的字典,而且键是不可变的。所以这是不可能的。