函数乘以字典中的值 - Python

时间:2017-06-05 16:12:37

标签: python-3.x function dictionary

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

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

我已经从这样的事情开始:

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'

有人能帮助我吗? 欢迎采用其他方式来解决这个问题。请解释答案中的代码,以便我学到一些东西。

1 个答案:

答案 0 :(得分: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。