4

假设我有 2 个字典:

A = {'banana':10, 'apple':2, 'pear':5, 'orange':3}  
B = {'banana':7, 'orange':5, 'strawberry':4, 'blueberry':1, 'kiwi':10}  

现在,我需要打印这些字典的所有差异并将它们全部显示(即使其中有一个键A不在B或其他位置),当然还有绝对值,所以结果应该是:

c = {'banana':3, 'apple':2, 'pear':5, 'orange':2, 'strawberry':4, 'blueberry':1, 'kiwi':10}  

有任何想法吗?我以前看过一些帖子,但只是对这种需求的部分回答。

4

2 回答 2

7

使用collections.Counter

from collections import Counter

A = {'banana':10, 'apple':2, 'pear':5, 'orange':3}
B = {'banana':7, 'orange':5, 'strawberry':4, 'blueberry':1, 'kiwi':10}

A_Counter, B_Counter = Counter(A), Counter(B)

print((A_Counter - B_Counter) | (B_Counter - A_Counter))

输出:

Counter({'kiwi': 10, 'pear': 5, 'strawberry': 4, 'banana': 3, 'apple': 2, 'orange': 2, 'blueberry': 1})
于 2013-04-24T16:45:24.847 回答
4

在 py2xA.viewkeys() | B.viewkeys()中,将从A&返回键的联合B,然后您可以使用 dict 理解来获得所需的结果。

In [14]: A = {'banana':10, 'apple':2, 'pear':5, 'orange':3}

In [15]: B = {'banana':7, 'orange':5, 'strawberry':4, 'blueberry':1, 'kiwi':10}

In [16]: {x : abs( A.get(x,0) - B.get(x,0) )  for x in A.viewkeys() | B.viewkeys()}
Out[16]: 
{'apple': 2,
 'banana': 3,
 'blueberry': 1,
 'kiwi': 10,
 'orange': 2,
 'pear': 5,
 'strawberry': 4}

对于 py3x 使用:A.keys() | B.keys()

对于 py2x 和 py3x:set(A).union(B)

于 2013-04-24T16:46:01.100 回答