python - 如何在 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
我还发现了一个非常相似的问题。但是,这是将值相加而不是相乘,我无法找到转换来找到产品。
解决方案
你可以试试这个解决方案:
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)
推荐阅读
- javascript - Javascript 在加载页面进行搜索输入时触发 Enter 键而无需实际按下 Enter 键
- java - mybatis中的动态sql列表
- docker - 错误:构建映像并尝试在 Docker 上运行时,OCI 运行时创建失败
- gitlab-ci-runner - 在 gitlab 共享运行器上运行时,回车 (\r) 运算符不起作用
- javascript - 在javascript中首先显示加载的元素
- amazon-web-services - 无法从本地机器连接到 rds
- c - 为什么这段代码在输入和输出行之间打印一个随机字符?
- r - system2("open","/Users/folder (P)") 在 R 中导致“意外标记 `('”附近出现语法错误
- git - 为什么带有路径的 git checkout 不会影响 Pro Git 中声明的索引?
- python - 如何修复 vscode 中用于 python 脚本的运行问题