使用变量作为键从字典中检索值



很抱歉,如果这真的很简单,但我似乎无法启动它。

我的应用程序正在使用嵌套字典。例如:-

test = {
"alpha": "first",
"beta": {
"mid": {
"message": "winner winner"
}
},
"omega": "last"
}

现在我需要能够从使用变量的字典中检索值,该变量的值是基于无数其他因素动态构造的。因此,本质上,我正在尝试组合一种方法来生成我需要的键,这取决于可变因素。

例如,如果我从一个函数返回&;beta&;,从另一个函数返回&;mid"从另一个"消息"中,我能想到的最好的方法是组装一个字符串,使看起来像键路径。

例如:

current = '["beta"]["mid"]["message"]'

我怎样才能用电流找回"赢家"字符串?

我试过这样做:-

v = '"[beta"]["mid"]"message]"'
print(test[v])

但是只是按了键错误。

必须是一种基于计算键获取值的简单方法。如果你能朝正确的方向推一把,我会很感激的。

[问题文本更新]是的,我知道我能做到:

val = test['beta']['mid']['message'] 

并返回值,我被困在如何使用生成的字符串作为关键路径。对不起,我说得不够清楚。

import re
t = '["beta"]["mid"]["message"]'
val = None
for i in re.findall(r'"([^"]+)"', t):
if(val == None):
val = test.get(i)
else:
val = val.get(i)
print(val)

from functools import reduce
import operator
import re
t = '["beta"]["mid"]["message"]'
reduce(operator.getitem, re.findall(r'"([^"]+)"', t), test)
winner winner

将三个键存储为三个不同的变量,而不是存储为字符串:

key_one = 'beta'
key_two = 'mid'
key_three = 'message'
v = test[key_one][key_two][key_three]

如果您已经有了您所描述的字符串格式的键,那么执行一些字符串拆分以生成三个如上所示的变量。您不希望对代码进行求值,因为它会产生安全风险。

current = '["beta"]["mid"]["message"]'
keys = [w.strip('[]"') for w in current.split('"]["')]
test[keys[0]][keys[1]][keys[2]]
# or
# key_one = keys[0]
# key_two = keys[1]
# key_three = keys[2]
# v = test[key_one][key_two][key_three]    

应该这样做:

v = test['beta']['mid']['message']
print(v)

注意:问题是您在示例中使用字符串索引字典,而不是一组键。

相关内容

  • 没有找到相关文章