如何使用字符串访问 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"