创建字典,其中键是变量名

kyr*_*nia 7 python python-3.x

我经常想创建一个字典,其中键是变量名。例如,如果我有变量a并且b我想生成:({"a":a, "b":b} 通常在函数末尾返回数据)。

python中是否有任何(理想情况下内置的)方法可以自动执行此操作?即有一个函数,这样create_dictionary(a,b)返回{"a":a, "b":b}

p-r*_*bot 9

你有没有考虑过创建一个类?类可以被视为字典的包装器。

# 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)


abh*_*kdm 6

您可以编写自己的函数 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使用的那样

  • [“在 Python 中使用 eval 是一种不好的做法吗?”](http://stackoverflow.com/questions/1832940/is-using-eval-in-python-a-bad-practice),通常`eval` 不应该是首选工具。 (3认同)