我经常想创建一个字典,其中键是变量名。例如,如果我有变量a并且b我想生成:({"a":a, "b":b} 通常在函数末尾返回数据)。
python中是否有任何(理想情况下内置的)方法可以自动执行此操作?即有一个函数,这样create_dictionary(a,b)返回{"a":a, "b":b}
你有没有考虑过创建一个类?类可以被视为字典的包装器。
# Generate some variables in the workspace
a = 9; b = ["hello", "world"]; c = (True, False)
# Define a new class and instantiate
class NewClass(object): pass
mydict = NewClass()
# Set attributes of the new class
mydict.a = a
mydict.b = b
mydict.c = c
# Print the dict form of the class
mydict.__dict__
{'a': 9, 'b': ['hello', 'world'], 'c': (True, False)}
Run Code Online (Sandbox Code Playgroud)
或者,setattr如果您想传递变量名称列表,则可以使用该函数:
mydict = NewClass()
vars = ['a', 'b', 'c']
for v in vars:
setattr(mydict, v, eval(v))
mydict.__dict__
{'a': 9, 'b': ['hello', 'world'], 'c': (True, False)}
Run Code Online (Sandbox Code Playgroud)
您可以编写自己的函数 create_dict
def create_dict(*args):
return dict({i:eval(i) for i in args})
a = "yo"
b = 7
print (create_dict("a", "b"))
Run Code Online (Sandbox Code Playgroud)
这给出了{'a': 'yo', 'b': 7}输出。
这是一个简单的生成器:
vars = ["a", "b"]
create_dict = {i:eval(i) for i in args}
Run Code Online (Sandbox Code Playgroud)
或者你可以使用这个单行 lambda 函数
create_dict = lambda *args: {i:eval(i) for i in args}
print (create_dict("a", "b"))
Run Code Online (Sandbox Code Playgroud)
但是,如果您想将变量传递给函数而不是将变量名作为字符串传递给函数,那么将变量名作为字符串实际获取会非常麻烦。但如果是这样,那么您可能应该尝试使用locals(), vars(),globals()如Nf4r使用的那样