[英]keys not in dictionary
我正在尝试判断一个参数是否是一个字典,它的长度是否为 4 以及它是否有任何名称不在此元组中的键: ('posicao','vida','forca','exercito')
。
如果有任何键的名称不在该元组中,则该函数应返回False
。 但是它一直持续到return verifica_pos(arg)
,我不明白为什么会这样:
def eh_unidade(arg):
nom_chaves = ('posicao','vida','forca','exercito')
if isinstance(arg, dict) and len(arg) == 4:
for key in arg:
if key in nom_chaves:
return verifica_pos(arg)
else:
return False
else:
return False
我们可以使用集合来清理程序的(损坏的)逻辑:
NOM_CHAVES = {'posicao', 'vida', 'forca', 'exercito'}
def eh_unidade(arg):
if isinstance(arg, dict):
keys = arg.keys()
if len(keys) == 4 and set(keys) <= NOM_CHAVES:
return verifica_pos(arg)
return False
或者,我们可以使用all
和map
组合:
NOM_CHAVES = ('posicao', 'vida', 'forca', 'exercito')
def eh_unidade(arg):
if isinstance(arg, dict):
keys = arg.keys()
if len(keys) == 4 and all(map(lambda key: key in NOM_CHAVES, keys)):
return verifica_pos(arg)
return False
或者我们可以重新排列您的原始代码并添加几个否定:
NOM_CHAVES = ('posicao', 'vida', 'forca', 'exercito')
def eh_unidade(arg):
if not (isinstance(arg, dict) and len(arg) == 4):
return False
for key in arg:
if key not in NOM_CHAVES:
return False
return verifica_pos(arg)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.