3

我可以创建一个从其输入返回字典的函数吗?喜欢:

>>> a = 1
>>> b = 2
>>> d = vars_to_dict(a,b) # or d = vars_to_dict((a,b))
>>> print d
{'a': 1, 'b': 2}

它不一定是一个函数 - 我不相信对象名称被赋予该函数。如果有从变量创建字典的简写,我只是在徘徊。目前我做了很多这样的事情:

dict(data=data,index=index)

这样我可以在制作字典时选择键名,但我真的不需要选择它们,因为它们是变量的名称。

PS:我看过这个问题,但不太一样(我从vars而不是var名开始)

给定 Python 中的变量名列表,我如何创建一个以变量名作为键的字典(到变量的值)?

编辑:这是“需要” 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

4 回答 4

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'

唯一的事情是:您将不得不过滤掉不需要的变量。

于 2013-10-30T11:01:18.090 回答
1

这是一种糟糕的编程方式。从字典的开头开始。

于 2013-10-30T12:25:51.960 回答
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()and 或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
于 2013-10-30T11:15:34.690 回答
-1

请试试这个...

def vars_to_dict(a,b):
    dict1= {}
    dict[a]=a,
    dict[b]=b,
    return dict1
于 2013-10-30T10:58:05.037 回答