不在字典中的键

2024-09-30 20:18:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图确定一个参数是否是字典,如果它的长度是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

Tags: keyinposfalsereturnifargnom
1条回答
网友
1楼 · 发布于 2024-09-30 20:18:13

我们可以使用集合来清理程序的(损坏的)逻辑:

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)

相关问题 更多 >