在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”重复此过程