迭代集合交集和排除的 Pythonic 方法是什么?
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()
dictionary view to provide the set here. If you are using Python 3, then dict.keys()
is a dictionary view already; dictionary views 作为集合。
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()
dictionary view to provide the set here. If you are using Python 3, then dict.keys()
is a dictionary view already; dictionary views 作为集合。