[英]What is the Pythonic way to iterate over set intersection and exclusions?
set_of_A_key
和set_of_B_key
是字典dict_A
和dict_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.