繁体   English   中英

键不在字典中

[英]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

或者,我们可以使用allmap组合:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM