你得到一個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給出一個單獨的字典。 –