在python中比较两个字典和打印键值对

时间:2014-02-25 04:51:35

标签: python dictionary

我有两本词典:

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

现在我要打印差异。我想 在这种情况下,输出应为

{'fruits' : 'carrot'}

如果键已更改 - 假设已更改为

b = { "toy": "car"}

然后输出应该是

{ "toy": "car"}

提前致谢。

2 个答案:

答案 0 :(得分: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)执行类似操作。

答案 1 :(得分:1)

关于差异,您可以使用词典理解来仅过滤b中的a个键:

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

对于第二部分,“如果密钥已更改”,{'froot'}不是有效字典,并且密钥是不可变的。所以这是不可能的。