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

新手上路,请多包涵

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

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

原文由 kyrenia 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 959
2 个回答

您是否考虑过创建一个班级?类可以看作是字典的包装器。

 # 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 函数:

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

原文由 p-robot 发布,翻译遵循 CC BY-SA 3.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"))

但是如果你想将变量而不是变量名作为字符串传递给函数,那么实际上将变量名作为字符串获取是相当混乱的。但如果是这样的话,那么你应该尝试使用 locals() , vars() , globals() 使用的 Nf4

原文由 lycuid 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题