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

比较两个字典并在python中打印键值对,python,dictionary,Python,Dictionary,我有两本字典: a= { "fruits": ["apple", "banana"] } b = { "fruits": ["apple", "carrot"]} 现在我想打印差异。我想 在这种情况下,输出应该是 {'fruits' : 'carrot'} 另外,如果键已更改-假设if已更改为 b = { "toy": "car"} 那么输出应该是 { "toy": "car"} 提前感谢。至于差异,您可以使用字典理解功能仅过滤a中的b键: >>> {key: b[ke

我有两本字典:

a= { "fruits": ["apple", "banana"] }
b = { "fruits": ["apple", "carrot"]}
现在我想打印差异。我想 在这种情况下,输出应该是

{'fruits' : 'carrot'}
另外,如果键已更改-假设if已更改为

b = { "toy": "car"}
那么输出应该是

{ "toy": "car"}

提前感谢。

至于差异,您可以使用字典理解功能仅过滤
a
中的
b
键:

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


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

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

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


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

看起来
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
keys
)执行类似的操作。

看起来
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
)执行类似的操作。

您实际上无法拥有这些词典。字典不是这样工作的。既然它是
a
中的一个键,但在
b
中不存在,你想把
'vegets'
也打印出来吗?这是无效的
a={'fruits':'apple''grape','vegets':'carrot'}
@yopy,从技术上讲它是“有效的”,但这可能不是OP想要的:)@yopy两个相邻的字符串字面值串联在一起,所以
的“水果”:“苹果”“葡萄”
就是
的“水果”:“applegrape”
你不可能真正拥有那些字典。字典不是这样工作的。既然它是
a
中的一个键,但在
b
中不存在,你想把
'vegets'
也打印出来吗?这是无效的
a={'fruits':'apple''grape','vegets':'carrot'}
@yopy,从技术上讲它是“有效的”,但这可能不是OP想要的:)@yopy两个相邻的字符串字面值串联在一起,所以
'fruits':'apple''grape'
只是
'fruits':'applegrape'
非常感谢!viewitems对我帮助很大:)非常感谢!viewitems对我帮助很大:)