你得到一个KeyError异常为为^
将查找对称差这意味着键独特要么,键不两者。你也不需要创建集,您可以使用返回的view object从主叫.keys
d1 = {1: 30, 2: 20, 3: 30, 5: 80}
d2 = {1: 40, 2: 50, 3: 60, 4: 70, 6: 90}
# d1.keys()^d2 -> {4, 5, 6}, 4, 6 unique to d2, 5 unique to d1.
symm = {k: d1.get(k, d2.get(k)) for k in d1.keys()^d2}
inter = {k: d2[k] + d1[k] for k in d1.keys() & d2}
d1.get(k, d2.get(k))
作品为对称差因为当我们从d2
唯一键捕获。
为python2代码稍有不同,你需要用.viewkeys
更换.keys
获得view object:
{k: d1.get(k, d2.get(k)) for k in d1.viewkeys()^d2}
{k: d2[k] + d1[k] for k in d1.viewkeys() & d2}
拿到两个集之间的仅仅是差异,即什么是在一个,但不是在B,你需要-
:
In [1]: d1 = {1: 30, 2: 20, 3: 30, 5: 80}
In [2]: d2 = {1: 40, 2: 50, 3: 60, 4: 70, 6: 90}
In [3]: {k: d2[k] for k in d2.keys() - d1}
Out[3]: {4: 70, 6: 90}
In [4]: {k: d1[k] for k in d1.keys() - d2}
Out[4]: {5: 80}
In [5]: d2.keys() - d1 # in d2 not in d1
Out[5]: {4, 6}
In [6]: d1.keys() - d2 # in d1 not in d2
Out[6]: {5}
In [7]: d1.keys()^d2 # unique to either
Out[7]: {4, 5, 6}
对称差是喜欢做的不同的工会:
In [12]: d1.keys() - d2 | d2.keys() - d1
Out[12]: {4, 5, 6}
所有的操作符都在python docs中讨论过,Set_(mathematics)上的wiki页面也给出了一个很好的概述。
一个建议:你的问题很混乱,不容易理解,代码看起来很奇怪。那是什么编程语言?当你说你期望某个输出,但你不提供输入时,几乎不可能理解你要找的东西。 – Andry
对不起,现在就编辑它。它的python和一个测验问题之一,我试图解决它。我对python非常陌生,所以我的代码看起来非常难看 – user6820366
从输出看起来你想要一个包含两个字典的元组。函数dict_interdif给出一个单独的字典。 –