Python 字典名称来自存储在列表/元组/变量中的值

Python 字典名称来自存储在列表/元组/变量中的值,python,Python,我的名单如下: ['ExampleName', ['1', 'some_value_1'], ['2', 'some_value_2']] 我试图找出如何编写函数或循环,以获取列表的第一个元素,并将其设置为字典名。 所需输出相当于: ExampleName = {1:'some_value_1', 2:'some_value_2'} 到目前为止,尝试了eval命令,但没有成功注意:这不是一件好事,只是为了好玩 您可以使用locals()字典在运行时创建变量,例如: >>>

我的名单如下:

['ExampleName', ['1', 'some_value_1'], ['2', 'some_value_2']]
我试图找出如何编写函数或循环,以获取列表的第一个元素,并将其设置为字典名。 所需输出相当于:

ExampleName = {1:'some_value_1', 2:'some_value_2'}

到目前为止,尝试了
eval
命令,但没有成功

注意:这不是一件好事,只是为了好玩

您可以使用
locals()
字典在运行时创建变量,例如:

>>> hello # this variable does not exist yet
Traceback (most recent call last):
  File "<pyshell#25>", line 1, in <module>
    hello
NameError: name 'hello' is not defined
>>> locals()['hello'] = 'world' # create new variable
>>> hello
'world'
>>> locals().pop('hello')  # delete variable
'world'
>>> hello
Traceback (most recent call last):
  File "<pyshell#29>", line 1, in <module>
    hello
NameError: name 'hello' is not defined
>>> 
>>您好#此变量尚不存在
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
你好
NameError:未定义名称“hello”
>>>locals()['hello']='world'#创建新变量
>>>你好
“世界”
>>>locals().pop('hello')#删除变量
“世界”
>>>你好
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
你好
NameError:未定义名称“hello”
>>> 

现在,通过了解这一点,你应该能够构建你想要的词典,就像在评论中所说的那样,基于其他变量内容生成变量名是一个非常糟糕的主意,你应该创建一个词典,类似这样:

example=['ExampleName',['1','some_value_1'],['2','some_value_2']]
输出={
示例[0]:{element[0]:示例[1:]中元素的元素[1]
}
打印(输出)
>>>{'ExampleName':{'1':'some_value_1','2':'some_value_2'}

我认为这样做不是个好主意。使用可能会导致一些潜在的安全风险

不管怎样,它正是您想要实现的目标:

example_list = ['ExampleName', ['1', 'some_value_1'], ['2', 'some_value_2']]

name, *key_value_pairs = example_list
dictionary = {int(key): value for key, value in key_value_pairs}
exec(f"{name} = {dictionary}")


另见:


如果您有几个这样的结构,您应该构建一个dict,比如
{'ExampleName':{1:'some_value_1',2:'some_value_2'},'SomeOtherName':{……},}
。像你想做的那样创建变量通常是个坏主意。不要这样做。不要使用动态变量,使用另一个容器,在这种情况下,另一个
dict
可能
dict(示例[1:])
可能是一种更简洁的方法,可以从对列表中构造字典。@kaya3太棒了!请看一看,不,
locals()
正是即使尝试动态创建变量也不应该使用的,因为对
locals()
的赋值不能保证实际影响本地名称空间。事实上,在CPython中,只有当
locals()是globals()
时,即当您在全局命名空间中时,这才起作用。例如,它将在函数内部失败。实际上,它与我在本例中试图实现的完全相同。@User0261如果是,请将此答案标记为