Python 如何根据列表给出的键在嵌套字典中获取值?
我试图根据列表给出的键在嵌套字典中获取值 这是我的密码:Python 如何根据列表给出的键在嵌套字典中获取值?,python,list,dictionary,Python,List,Dictionary,我试图根据列表给出的键在嵌套字典中获取值 这是我的密码: ops = { 'OP1' : {'W1':5, 'w3':6, 'w4':7, 'w5':9}, 'OP3' : {'W21':61, 'w22':56, 'w23':76, 'w24':96}, 'OP4' : {'W31':61, 'w32':56, 'w33':76, 'w34':96}, 'OP5' : {'W41':61, 'w42':56, 'w43':76, 'w44':96}, }
ops = {
'OP1' : {'W1':5, 'w3':6, 'w4':7, 'w5':9},
'OP3' : {'W21':61, 'w22':56, 'w23':76, 'w24':96},
'OP4' : {'W31':61, 'w32':56, 'w33':76, 'w34':96},
'OP5' : {'W41':61, 'w42':56, 'w43':76, 'w44':96},
}
lsta = ['OP1', 'OP3', 'OP4', 'OP5']
lstd = ['w3', 'w22', 'w32', 'w44']
#我试过了
我想要的是lstd给出的每个键的对应值,这意味着:
结果=[6,56,56,96]
有人能帮我吗?谢谢问题在于您使用的是嵌套循环,而您应该同时迭代两个列表。您可以使用
zip
:
[ops[d1][d2] for d1, d2 in zip(lsta, lstd)]
# [6, 56, 56, 96]
这就是工作:
lsta=['OP1','OP3','OP4','OP5']
lstd=['w3','w31','w4','w51']
ops={
'OP1':{'W1':5,'w3':6,'w4':7,'w5':9},
‘OP3’:{'W11':61,'w31':56,'w41':76,'w51':96},
OP4:{'W11':61,'w4':56,'w41':76,'w51':96},
OP5:{'W11':61,'w666':56,'w41':76,'w51':96},
}
对于lsta中的i:
如果我在ops.keys()中:
sub_dict=ops[i]
对于lstd中的j:
如果子目录键()中的j:
打印(子目录[j])
您好,谢谢您抽出时间来帮助我。我试过你的建议,但没用。我得到了以下错误:文件“”,第46行,在[ops[d1][d2]中用于d1,d2在zip(lsta,lstd)]中的keyrorm:“OP1”告诉您外部字典不包含“OP1”,这在共享示例@campioniEach dictionary中不是这样的,我认为问题在于,但我不知道如何解决这个问题。@campioni此sol适用于您共享的示例。请共享一个显示这会在何处引发错误的页面。我发现了错误。非常感谢你。你的建议很有效!:)什么是ops
?我在您发布的代码中看到了ops\u machine
,但没有ops
[ops\u machine[d1][d2]用于zip中的d1,d2(lsta,lstd)]
返回预期的结果您正在将浮动映射到分布非常奇怪的索引:0.00到0.166=>0,0.167到0.499=>1,0.500到0.833=>2,0.834到1.00=>3。假设浮动随机分布,指数0和3的发生概率分别为16.7%,指数1和2的发生概率分别为33.3%。这是故意的吗?[vs[round(ind*(len(vs)-1))]代表k,ind in zip(lsta,individual[3:7])代表vs in[list(ops_machine[k].values()])]
[ops[d1][d2] for d1, d2 in zip(lsta, lstd)]
# [6, 56, 56, 96]