我有两本词典:
a= { "fruits": ["apple", "banana"] }
b = { "fruits": ["apple", "carrot"]}
现在我要打印差异。我想 在这种情况下,输出应为
{'fruits' : 'carrot'}
如果键已更改 - 假设已更改为
b = { "toy": "car"}
然后输出应该是
{ "toy": "car"}
提前致谢。
答案 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'}
不是有效字典,并且密钥是不可变的。所以这是不可能的。