Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中,如何将嵌套字典的值与不同数量的键相乘?_Python_Python 3.x_Dictionary - Fatal编程技术网

在Python中,如何将嵌套字典的值与不同数量的键相乘?

在Python中,如何将嵌套字典的值与不同数量的键相乘?,python,python-3.x,dictionary,Python,Python 3.x,Dictionary,我尝试将嵌套字典的值相乘,这些嵌套字典包含作为键一部分的特定字符串。每个嵌套字典都有不同数量的键。以下是我的输入示例: Node = ['AY','AN'] factor = {'A': { ('BY','EY','AY'): 0.95, ('BY','EY','AN'): 0.05, ('BY','EN','AY'): 0.94, ('BY','EN','AN'): 0.06, ('BN','EY','AY'): 0.29,

我尝试将嵌套字典的值相乘,这些嵌套字典包含作为键一部分的特定字符串。每个嵌套字典都有不同数量的键。以下是我的输入示例:

Node = ['AY','AN']

factor =   {'A': {
      ('BY','EY','AY'): 0.95,
      ('BY','EY','AN'): 0.05,
      ('BY','EN','AY'): 0.94,
      ('BY','EN','AN'): 0.06,
      ('BN','EY','AY'): 0.29,
      ('BN','EY','AN'): 0.71,
      ('BN','EN','AY'): 0.001,
      ('BN','EN','AN'): 0.999},
  'J': {
      ('AY','JY'): 0.90,
      ('AN','JY'): 0.05,
  'M': {
      ('AY','MY'): 0.70,
      ('AN','MY'): 0.01}}
节点
包含在
因子
中嵌套字典“A”、“J”和“M”的每个键中必须包含的字符串(分别,即首先搜索包含“AY”的键,然后搜索包含“AN”的键)

预期输出: 输出
new\u因子
必须包含与
节点中元素数量相同的键:

new_factor =   { 'AY':{
      ('BY','EY','AY'): 0.95*90*70, # ('BY','EY','AY')*('AY','JY')*('AY','MY')
      ('BY','EN','AY'): 0.94*90*70,
      ('BN','EY','AY'): 0.29*90*70,
      ('BN','EN','AY'): 0.001*90*70}
                 'AN':{
      ('BY','EY','AN'): 0.05*0.05*0.01,
                       # ('BY','EY','AN')*('AN','JY')*('AN','MY')
      ('BY','EN','AN'): 0.06*0.05*0.01,
      ('BN','EY','AN'): 0.71*0.05*0.01,
      ('BN','EN','AN'): 0.999*0.05*0.01}}
一些背景: 我有一段代码进入嵌套字典的每个键,检查组成键的集合中是否包含
st

for st in Node:# Each state of not_queried node
    mult = dict()
    for element in factor:
        factor_node = factor[element]
        for state,prob in factor_node.items():
            if(set([st]).issubset(set(state))): # Finds out if st is in key
               mult[state] = prob 

我还发现了一个非常相似的例子。但是,这是为了添加值,而不是将它们相乘,因此我无法找到查找产品的转换。

您可以尝试以下解决方案:

Node = ['AY','AN']

factor =   {'A': {
      ('BY','EY','AY'): 0.95,
      ('BY','EY','AN'): 0.05,
      ('BY','EN','AY'): 0.94,
      ('BY','EN','AN'): 0.06,
      ('BN','EY','AY'): 0.29,
      ('BN','EY','AN'): 0.71,
      ('BN','EN','AY'): 0.001,
      ('BN','EN','AN'): 0.999},
  'J': {
      ('AY','JY'): 0.90,
      ('AN','JY'): 0.05},
  'M': {
      ('AY','MY'): 0.70,
      ('AN','MY'): 0.01}
      }

product = 1

for key_1 in factor:
    for key_2, value in factor[key_1].items():
        if Node[0] in key_2 or Node[1] in key_2:
            product *= value

print(product)

感谢您的回答@NamanJain,但是,您的代码也会将“A”的元素相乘。我需要的是,将包含“AY”的“A”中的每个元素乘以另外两个字典(“J”和“M”)中也包含“AY”的元素。然后,对“AN”重复此过程