有没有办法为给定的变量创建一个dict {var_name:var_value}?

时间:2013-10-30 10:40:12

标签: python

我可以创建一个从输入中返回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名称)

Given a list of variable names in Python, how do I a create a dictionary with the variable names as keys (to the variables' values)?

编辑:这是“需要”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:澄清一下:我想知道是否有办法将变量的名称变为字典或字符串。而不是通过手动输入它。

4 个答案:

答案 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