如何使用字符串访问 Python 字典名称?
How to access a Python dictionary name with string?
我有字符串 "dict_1"
,我有一个名为 dict_1
.
的字典
x = "dict_1"
dict_1 = {"a": "b", "c": "d"}
那么,我可以像 x['a']
一样访问 dict_1
吗?
我找到了一个 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()
。 returns 在本地范围内定义的变量字典。你会用 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"
我有字符串 "dict_1"
,我有一个名为 dict_1
.
x = "dict_1"
dict_1 = {"a": "b", "c": "d"}
那么,我可以像 x['a']
一样访问 dict_1
吗?
我找到了一个 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()
。 returns 在本地范围内定义的变量字典。你会用 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"