【问题标题】:function to multiplying the values in a dictionary - Python将字典中的值相乘的函数 - Python
【发布时间】:2017-06-05 16:12:37
【问题描述】:

我正在尝试定义一个执行布尔逻辑或门功能的函数。理想情况下,该函数应该接受字典,因为我的数据是字典格式。

我查过不同的东西,但现在卡住了。

我是这样开始的:

d = {'26': [0.5], '22': [0.5], '12': [0.5]}
def OR_function(**parameters):
    pi *= (1 - parameters)
    return (1 - pi)
OR_function(**d)

(我知道错了)

然后在阅读了一整天之后,我设法打开了字典,但我仍然无法执行递归原地产品。我看过函数式编程运算符,但它们只接受两个参数 [https://docs.python.org/3/library/operator.html]

目前我的函数定义如下所示:

import operator
def OR_function(**parameters):
print(operator.imul(list(*parameters)))
#pi = 0
#for i, j in parameters.items():
#    pi *= (1 - j[0])
#print(pi)
return 1 #- pi

它会引发以下错误: 'TypeError: op_imul 预期 2 个参数,得到 3'

有人可以帮助我吗? 欢迎使用替代方法来解决此问题。请务必在答案中解释代码,以便我可以学到一些东西。

【问题讨论】:

    标签: python-3.x function dictionary


    【解决方案1】:

    除非我误解了您要执行的操作,否则无需解压字典。这对我有用:

    d = {'26': [0.5], '22': [0.5], '12': [0.5]}
    
    def OR_function(parameters):
      pi = 1
    
      print(parameters)
      print("=================")
    
      for key, value in parameters.items():
          print(pi)
          pi *= (1 - value[0])
    
      print("=================")
      print(pi)
      return (1 - pi)
    
    
    OR_function(d)
    

    这会产生这个输出(而且看起来是正确的):

    {'22': [0.5], '12': [0.5], '26': [0.5]}
    =================
    1
    0.5
    0.25
    =================
    0.125
    

    如果字典中的值是包含多个元素的列表,则所需的更改非常小,您只需要一个额外的 for 循环:

    d = {'26': [0.5, 0.7], '22': [0.5, 0.9], '12': [0.5, 0.5]}
    
    def OR_function(parameters):
      pi = 1
    
      print(parameters)
      print("=================")
    
      for key, value in parameters.items():
          for x in value:
              print(pi)
              pi *= (1 - x)
    
      print(pi)
      return (1 - pi)
    
    
    OR_function(d)
    

    来自您发布的注释代码:

    #pi = 0
    #for i, j in parameters.items():
    #    pi *= (1 - j[0])
    #print(pi)
    

    您的问题似乎是您将变量 pi 初始化为 0,这将在递归乘法中产生 0 的值。

    【讨论】:

      猜你喜欢
      • 2013-02-26
      • 2018-03-14
      • 1970-01-01
      • 2015-07-19
      • 2021-06-25
      • 1970-01-01
      • 1970-01-01
      • 2022-12-17
      • 2017-05-05
      相关资源
      最近更新 更多