当前位置: 首页 > 知识库问答 >
问题:

elif使用字典,但不超过值[重复]

闻人凯泽
2023-03-14

大家好,假设我想用字典替换一个大的el-ifs语句。简化版本如下:

def functionA(a1, a2, a3):

    results = {
        'case1': a2/a3,
        'case2': 1,
        ...
    }
    return results[a1]

所以a1将是一个字符串('case1'或'case2'或...),问题是在某些情况下,a3可能是0,所以结果字典无法定义(在所有这些情况下,a1都不是'case1')。例如:

functionA('case2', 1.0, 3.0)
Out[81]: 1
functionA('case2', 1.0, 0.0)
ZeroDivisionError: integer division or modulo by zero

所以在第二种情况下,我期望1,但我得到了一个错误。

一种可能的解决办法是:

def functionA(a1, a2, a3):
    results = {
        'case1': str(a2) + '/' + str(a3),
        'case2': str(1),
    }

    return eval(results[a1])

由于我有一个复杂计算的多个案例,有没有更好的解决方案?

共有3个答案

龚星洲
2023-03-14

如果只是一个值,你可以用一个简单的If-else。

def functionA(a1, a2, a3):

     if a3:
        case1_value = a2/a3
     else: 
        case1_value = a2

    results = {
        'case1': case1_value,
        'case2': 1,
        ...
    }
    return results[a1]

或者使用这个if-else条件创建一个dvision函数,并在dict值中使用它。

邓高韵
2023-03-14

您可以在字典中使用三元运算符

def functionA(a1, a2, a3):

    results = {
        'case1': a2 if a3==0 else a2/a3,
        'case2': 1
    }
    return results[a1]

链接:https://repl.it/NRkd

宗政昱
2023-03-14
def functionA(a1, a2, a3):
    results = {
        'case1': a2 / a3 if a3 != 0.0 else a2,
        'case2': 1,
        # ...
    }
    return results[a1]

然而,我建议不要采用这种方法,因为整个字典必须首先计算,只有一个值。

相反,如果你真的想使用字典,并且它也很有效,我建议:

myproc = {
    'case1': lambda a2, a3: a2 / a3 if a3 != 0.0 else a2,
    'case2': lambda a2, a3: 1
}

然后:

>>> myproc['case1'](2, 3)
0.6666666666666666
 类似资料:
  • 我正在尝试测试一系列端口,并且还设置了一个超时,在该超时中,如果值被命中并且连接还没有建立,它将移动到下一个端口。如果在命中超时值之前建立了连接,我想打印该值。问题是,我试图用一个python脚本在一行中完成它... Python-C“导入套接字;print(socket.socket(socket.af_inet,socket.sock_stream).create_connection(('1

  • 本文向大家介绍浅谈python字典多键值及重复键值的使用,包括了浅谈python字典多键值及重复键值的使用的使用技巧和注意事项,需要的朋友参考一下 在python中使用字典,格式如下: dict={ key1:value1 , key2;value2 ...} 在实际访问字典值时的使用格式如下: dict[key] 多键值 字典的多键值形式如下: dict={(ke11,key12):value

  • 本文向大家介绍python字典多键值及重复键值的使用方法(详解),包括了python字典多键值及重复键值的使用方法(详解)的使用技巧和注意事项,需要的朋友参考一下 在Python中使用字典,格式如下: 在实际访问字典值时的使用格式如下: 多键值 字典的多键值形式如下: 在实际访问字典里的值时的具体形式如下所示(以第一个键为例): 或者是: 以下是实际例子: 多值 在一个键值对应多个值时,格式: 访

  • 问题内容: 我需要使用字典来过滤数据帧,该字典的键是列名,值是我要过滤的值: 但是我想做些事情 但这会多次过滤数据帧,一次过滤一个值,而不是一次应用所有过滤器。有没有办法以编程方式进行? 编辑:一个例子: 给 但预期结果是 仅应选择最后一个。 问题答案: IIUC,您应该可以执行以下操作: 通过制作一个系列来与以下项目进行比较: 选择以下内容的相应部分: 查找它们匹配的位置: 查找它们 都 匹配的

  • rank ▲ ✰ vote url 11 867 379 1107 url 用字典的值对字典进行排序 我有个字典,字典的值来自于数据库:一个是字符串,一个是数字.字符串是唯一的,所以键就是字符串. 我可以用键来排序,但是怎么用值来排序呢? 注:我已经看过另一个问题怎样对列表中的字典的键值对字典进行排序?,或许这种方法可以,但是我确实只需要一个字典,我想看看还有其他更好的方法. 对字典进行排序是不可

  • 我有一个函数可以返回三个值中的一个:a、b或c。 我需要根据:A、B或C的返回值执行不同的语句。据我所知,最好的方法是: 如果不引入这个新变量,是否有其他方法来计算的返回值<也许是这样的吧?