创建字符,其中键是变量名称

时间:2016-10-02 15:47:34

标签: python python-3.x

我经常想要一个字典,其中键名是变量名。例如,如果我有变量ab,那么要有一个字典{"a":a, "b":b}(通常在函数末尾返回数据)。

在自动执行此操作的python中是否有任何(理想内置)方式?即具有使create_dictionary(a,b)返回{"a":a, "b":b}

的功能

4 个答案:

答案 0 :(得分:1)

你考虑过创建课程吗?可以将类视为字典的包装器。

(?=)

如果您想传递变量名称列表,可以使用# 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)} 函数:

setattr

答案 1 :(得分:0)

你有没有试过像:

a, b, c, d = 1, 2, 3, 4
dt = {k:v for k, v in locals().items() if not k.startswith('__')}
print(dt)
{'a': 1, 'd': 4, 'b': 2, 'c': 3}

答案 2 :(得分:0)

您可以为create_dict

编写自己的函数
def create_dict(*args):
  return dict({i:eval(i) for i in args})

a = "yo"
b = 7
print (create_dict("a", "b"))

哪个输出{'a': 'yo', 'b': 7} 这是一个简单的生成器:

vars = ["a", "b"]
create_dict = {i:eval(i) for i in args}

或者你可以使用这个单线lambda函数

create_dict = lambda *args: {i:eval(i) for i in args}
print (create_dict("a", "b"))

但是如果你想将变量传递给函数而不是变量名称作为字符串,那么实际上将变量的名称作为字符串变得非常混乱。但如果是这样,那么您应该尝试使用Nf4r

使用的locals()vars()globals()

答案 3 :(得分:0)

在@ Nf4r的代码上,我使用类似的东西:

a, b = 1, 2

def make_dict(*args):
    # Globals will change of size, so we need a copy
    g = {k: v for k, v in globals().items() if not k.startswith('__')}  

    result = {}
    for arg in args:
        for k, v in g.items():
            try:
                if v == arg:
                    result[k] = v
            except ValueError:
                continue  # objects that don't allow comparison

    return result

make_dict(a, b)