我经常想要一个字典,其中键名是变量名。例如,如果我有变量a
和b
,那么要有一个字典{"a":a, "b":b}
(通常在函数末尾返回数据)。
在自动执行此操作的python中是否有任何(理想内置)方式?即具有使create_dictionary(a,b)
返回{"a":a, "b":b}
答案 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)