如何解决如何使用字符串访问 Python 字典名称?
我有字符串 "dict_1"
,我有一个名为 dict_1
的字典。
x = "dict_1"
dict_1 = {"a": "b","c": "d"}
那么,我可以像 dict_1
一样访问 x['a']
吗?
我发现了一个 Stack Overflow Question,但在这个问题中,OP 想用字符串创建变量,而不是用字符串访问变量(字典)。
我真的需要一些帮助。我使用的是 Python 3.8 和 Windows。
谢谢!
解决方法
在我看来,这里有两个基本选项。
最明显的方法是使用 eval
将字符串 x
的值转换为可用的 Python 对象 - 在本例中为字典 dict_1
。
请注意,eval
将字符串作为 Python 代码执行。如果字符串来自不受信任的来源,那么这样做是非常危险的。您应该谨慎使用它,并对任何输入进行适当的清理。
x = "dict_1"
dict_1 = {"a": "b","c": "d"}
print(type(eval(x)))
# Prints <class 'dict'>
print(eval(x)['a'])
# Prints "b"
另一种方法是利用locals()
。这将返回在本地范围内定义的变量字典。你可以用 x
索引它,这会给你字典本身,就像 eval
一样。
x = "dict_1"
dict_1 = {"a": "b","c": "d"}
print(type(locals()[x]))
# Prints <class 'dict'>
print(locals()[x]['a'])
# Prints "b"
理论上,使用 locals()
进行作业会被证明更安全,因为使用 eval
,您可能会无意中执行任意代码。
再说一次,如果来自不受信任的来源,您应该进行一些基本的健全性检查,例如检查变量是否在范围内并且是字典:
if x in locals() and type(locals()[x]) == dict:
print(locals()[x]['a'])
# Prints "b"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。