假设我有一些变量:
a, b, c, d, e = range(5)
我想将这些变量的值保存在文件中以供以后检查。我认为做到这一点的一种方法是:
lookup = {
'a': a,
'b': b,
'c': c,
'd': d,
'e': e
}
您可能会想像,如果有大量变量,这可能会很乏味。而且,是的,我知道许多编辑器都具有简化这种复制粘贴操作的功能。但我正在寻找动态构建键的标准“ Pythonic”方法:值查找,其中键是变量的名称,而值是变量的值!
我想到了这个
>>> {var.__name__: var for var in [a, b, c, d, e]}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <dictcomp>
AttributeError: 'int' object has no attribute '__name__'
这并不起作用,我并不感到惊讶,因为整数变量是常量(我不确定描述事物的确切方法):
>>> a = 1
>>> b = 1
>>> a is b
True
>>> b is a
True
>>> a == b
True
我该怎么做?
答案 0 :(得分:1)
DateTime.Now
输出:
import itertools
data = range(5)
result = {f"a{count}": value for count, value in zip(itertools.count(1), data)}
print(result)
答案 1 :(得分:1)
>>> from inspect import ismodule
>>> a = 1
>>> b = 1
>>> dict((k, v) for k, v in locals().items() if not k.startswith("__") and not callable(v) and not ismodule(v))
{'a': 1, 'b': 1}
但是要正确处理,您可能需要添加一些附加条件,并且还必须提防可变对象或值,因为在这种情况下,这些对象或值会发生变异,并且您将不会保留较早的值以供以后检查。序列化或复制它们可能会有所帮助。
答案 2 :(得分:1)
例如,您可以使用locals()
从另一个方向解决它并保存所有局部变量
import json
def foo(a=None, bb=None):
ccc='lots of c'; de=42
print( json.dumps( locals() ))
foo()
生成{"a": null, "bb": null, "ccc": "lots of c", "de": 42}
(json.dumps
是序列化字典的一种方法,并且仅适用于可以转换为JSON的简单变量)
获取一些变量的另一种方法是
print( json.dumps( dict( a=a, b=b, c=c) ))
答案 3 :(得分:0)
这是使用ascii_lowercase
模块中的string
的另一种方式:
import string
alphabets = iter(string.ascii_lowercase)
lookup = {next(alphabets): x for x in range(5)}
print(lookup)
# {'a': 0, 'b': 1, 'c': 2, 'd': 3, 'e': 4}