2016-08-02 204 views
1

我有兩個字典的值如下:比較兩個字典

a = {1:2, 3:4, 5:6} 
b = {1:5, 3:6, 7:1} 

對於a每一個關鍵,我想,要檢查鑰匙b存在,如果是這樣,我要同時打印的價值鍵,如果沒有,我打印0爲重點的值b

for key in a.keys(): 
    if key in b.keys(): 
     print key, a[key], b[key] 
    else: 
     print key, a[key], '0' 

輸出將是:

1 2 5 
3 4 6 
5 6 0 

但是,我也想打印在b鍵的值,如果它不a存在,這是最後的聲明相反,如果關鍵是在b但不是在a,打印鍵的值在b0作爲密鑰的值在a。輸出將是:

1 2 5 
3 4 6 
5 6 0 
7 0 1 

它應該很簡單,但我不知道我怎麼能做到這一點。謝謝!

回答

2

如果我理解正確的話,你想通過無論從字典中的所有鍵進行迭代,並使用'0'如果關鍵是從字典中缺少來自兩個庫打印他們的價值觀。是這樣的:

for key in set(a)|set(b): 
    print key, a.get(key, '0'), b.get(key, '0') 

set(a)|set(b)是從每個字典的密鑰集(即,它是不同的鍵的從任一字典的集合)的聯合。

dictionary.get(key, '0')返回'0'如果密鑰從字典中丟失。

+0

謝謝! set(a)如何工作而不必寫set(a.keys())? – Homap

+0

@Homap因爲迭代通過字典遍歷鍵。字典的行爲就像一個容器的鍵。這也適用於'for m in mydict'和'if in mydict'。 – khelwood

0

使用字典bget方法,提供默認值以供在未找到密鑰時使用。

for key in a: 
    print key, a[key], b.get(key, '0') 
+0

這是如何顯示'b'鍵而不是'a'的鍵? –

+0

我假設讀者能夠擴大在'a'中找到鑰匙的祕訣,而不是在'b'找到鑰匙在'b'中找到鑰匙,但不能在'a'中找到鑰匙。我的錯誤... – holdenweb

2
for key in set(a.keys()) | set(b.keys()): 
    print key, a.get(key, 0), b.get(key,0) 

|在設置的上下文中表示聯合。您也可以將結果集轉換爲列表並在迭代之前進行排序。

+0

只要你知道,在Python 3中,你不需要將'dict.keys'的結果轉換爲一個集合。 –