我可以创建一个从输入中返回dict的函数吗?像:
>>> a = 1
>>> b = 2
>>> d = vars_to_dict(a,b) # or d = vars_to_dict((a,b))
>>> print d
{'a': 1, 'b': 2}
它实际上不一定是一个函数 - 我不相信该函数的对象名称。如果有一个从vars创建dicts的简写,我只是在徘徊。目前我做了很多这样的事情:
dict(data=data,index=index)
这样我可以在制作词典时选择键名,但我不需要选择它们,因为它们是变量的名称。
PS:我已经看到了这个问题,但它并不完全相同(我从vars开始而不是var名称)编辑:这是“需要”var-dict的块之一:
data = []
index = []
for sent in sentences:
sent_data = []
sent_index = []
for word in sent:
sent_data.append(word[0])
sent_index.append((word[1],word[2]))
data.append(sent_data)
index.append(sent_index)
EDIT2:澄清一下:我想知道是否有办法将变量的名称变为字典或字符串。而不是通过手动输入它。
答案 0 :(得分:1)
您可以调用globals()
,它将返回所有全局变量的字典:
>>>a = 1
>>>b = 'foo'
>>>globals()
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, 'a': 1, 'b': 'foo' '__package__': None}
>>>globals()['a']
1
>>>globals()['b']
'foo'
唯一的事情是:你必须过滤掉不需要的变量。
答案 1 :(得分:1)
这是一种糟糕的编程方式。 从字典开始。
答案 2 :(得分:0)
请试试这个......
def vars_to_dict(a,b):
dict1= {}
dict[a]=a,
dict[b]=b,
return dict1
答案 3 :(得分:0)
一个技巧是在所有私人成员的开头使用_,你可以使用类似的东西:
import types
_vartypes = [types.BooleanType, types.ComplexType, types.FloatType, types.IntType, types.StringType ] # add as required
_vardict = {}
for _name in dir():
if not _name.startswith('_') and type(eval(_name)) in _vartypes:
_vardict[name] = eval(name)
您可以使用dict()
和/或locals()
两种方式返回词典,而不是使用globals()
。
在这些情况下,您会使用以下内容:
import types
_vartypes = [types.BooleanType, types.ComplexType, types.FloatType, types.IntType, types.StringType ] # add as required
_vardict = {}
for _key, _val in globals().items(): # You could do the same with locals()
if not _key.startswith('_') and type(_val) in _vartypes:
_vardict[_key] = _val