簡體   English   中英

迭代集合相交和排除的Python方法是什么?

[英]What is the Pythonic way to iterate over set intersection and exclusions?

set_of_A_keyset_of_B_key是字典dict_Adict_B鍵。 我想對以下三組中的鍵的字典值進行操作:

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

pythonic的方法是什么?

這很優雅,幾乎沒有代碼重復,但是需要進行額外的計算才能找到集合交集和排除項中的鍵

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])

還是有更好的方法?

您對自己來說太復雜了。 您似乎正在為缺少的鍵創建默認值 ,因此以下操作要簡單得多:

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()字典視圖在此處提供設置。 如果您使用的是Python 3,那么dict.keys()已經是一個字典視圖; 詞典視圖充當集合。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM