很抱歉,如果这真的很简单,但我似乎无法启动它。
我的应用程序正在使用嵌套字典。例如:-
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)
注意:问题是您在示例中使用字符串索引字典,而不是一组键。