有没有更简单的方式创建独立变量的字典?

225 投票
27 回答
236809 浏览
提问于 2025-04-15 21:05

我想要把一个变量的名字变成字符串,但我不太确定Python是否有这么强的自省能力。就像这样:

>>> print(my_var.__name__)
'my_var'

我想这么做是因为我有一堆变量,想把它们变成一个字典,像这样:

bar = True
foo = False
>>> my_dict = dict(bar=bar, foo=foo)
>>> print my_dict 
{'foo': False, 'bar': True}

不过我希望能有更自动化的方法来实现这个。

Python有 locals()vars() 这两个函数,所以我想应该有办法做到。

27 个回答

63

我一直想做到这一点。这种方法和rlotun的建议很相似,但它是一行代码,这对我来说很重要:

blah = 1
blah_name = [ k for k,v in locals().iteritems() if v is blah][0]

Python 3+

blah = 1
blah_name = [ k for k,v in locals().items() if v is blah][0]
131

正如unwind所说,这其实不是Python中常见的做法——在Python里,变量实际上是指向对象的名称映射。

不过,这里有一种尝试的方法:

 >>> a = 1
 >>> for k, v in list(locals().iteritems()):
         if v is a:
             a_as_str = k
 >>> a_as_str
 a
 >>> type(a_as_str)
 'str'
47

你是在尝试做这个吗?

dict( (name,eval(name)) for name in ['some','list','of','vars'] )

举个例子

>>> some= 1
>>> list= 2
>>> of= 3
>>> vars= 4
>>> dict( (name,eval(name)) for name in ['some','list','of','vars'] )
{'list': 2, 'some': 1, 'vars': 4, 'of': 3}

撰写回答