2015-06-20 37 views
0

set_of_A_keyset_of_B_key是詞典dict_Adict_B的兩組鍵。我想在下面的三套按鍵操作在字典中的值:什麼是Pythonic迭代設置交集和排除的方式?

(set_of_A_key & set_of_B_key)(set_of_A_key - set_of_B_key)(set_of_B_key - set_of_A_key)

什麼是Python的方式做到這一點?

這一個是優雅的用很少的代碼重複,但確實額外的計算爲找到交集的關鍵和排除

only_A = (set_of_A_key - set_of_B_key) 
only_B = (set_of_B_key - set_of_A_key) 

for key in (set_of_A_key | set_of_B_key): 
    if key in only_A: 
     A_val = dict_A[key] 
     B_val = 0 
    elif key in only_B: 
     B_val = dict_B[key] 
     A_val = 0 
    else: 
     B_val = dict_B[key] 
     A_val = dict_A[key] 
    some_function(A_val,B_val) 

或這一個速度快,但代碼重複出現

for key in (set_of_A_key - set_of_B_key): 
    some_function(dict_A[key],0) 
for key in (set_of_B_key - set_of_A_key): 
    some_function(0,dict_B[key]) 
for key in (set_of_A_key & set_of_B_key): 
    some_function(dict_A[key],dict_B[key]) 

還是有更好的方法來上面?

+0

你可以使用dict.viewkeys等.. –

+0

你實際上是在尋找symmetric_difference嗎? –

+1

@PadraicCunningham 我不是在尋找symmetric_difference,但'dict.viewkeys'領導幫助! – nimeshkiranverma

回答

3

你讓自己變得太複雜了。你出現丟失的鑰匙要創建默認值,所以下面就簡單得多了:

for key in dict_A.viewkeys() | dict_A.viewkeys(): 
    some_function(dict_A.get(key, 0), dict_B.get(key, 0)) 

使用dict.get()功能來代替缺失的關鍵違約。

請注意,我使用dict.viewkey() dictionary view來提供此處的設置。如果您使用Python 3,則dict.keys()已經是字典視圖; dictionary views充當集合。

+0

謝謝! 使用上面的代碼變得更快,優雅和短:) – nimeshkiranverma

相關問題