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)
和
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)
这样做的pythonic方式是什么?
这个很优雅,代码重复很少,但是在集合交集和排除中找到密钥需要额外的计算
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])
或者这个更快但代码重复存在
{{1}}
还是有更好的方法吗?
答案 0 :(得分: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充当集合。