首页 > 解决方案 > 如何在 Python 中将嵌套字典的值与不同数量的键相乘?

问题描述

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

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}}

Node包含必须在嵌套字典'A''J''M'的每个键中包含的字符串(分别,即首先搜索包含'AY'的键,然后搜索包含'AN'的键)在.factor

预期输出: 输出new_factor必须包含与元素一样多的键Node

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 

我还发现了一个非常相似的问题。但是,这是将值相加而不是相乘,我无法找到转换来找到产品。

标签: pythonpython-3.xdictionary

解决方案


你可以试试这个解决方案:

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)

推荐阅读