动态生成密钥:值查找变量列表

问题描述 投票:0回答:4

假设我有一些变量:

a, b, c, d, e = range(5)

我想保存,以便以后检查文件中,这些变量的值。一种方式我认为这样做是:

lookup = {
    'a': a,
    'b': b,
    'c': c,
    'd': d,
    'e': e
}

正如你可能想象,有大量的变量,这有可能会乏味。而且,是的,我知道很多编辑们的功能,使这种复制粘贴操作的方便。但是我正在寻找的标准,“Python化”的动态构建的关键途径:值查找其中的关键是变量的名称和值是可变的,好了,值!

我想这个问题:

>>> {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

我怎么可能做到这一点?

python
4个回答
1
投票
import itertools

data = range(5)

result = {f"a{count}": value for count, value in zip(itertools.count(1), data)}

print(result)

输出:

{'a1': 0, 'a2': 1, 'a3': 2, 'a4': 3, 'a5': 4}

1
投票

你可能想看看locals()inspect。其结果可能是即:

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

但要得到它的权利,你可能需要添加一些附加条件,而且你必须注意可变对象或值,在这种情况下,那些会发生变异,你会不会保存以便稍后进行检查早期值。序列化或复制它们可以帮助。


1
投票

你可以从另一个方向解决它,并保存所有的局部变量,使用locals()例如

import json
def foo(a=None, bb=None):
    ccc='lots of c'; de=42
    print( json.dumps( locals() ))

qazxsw POI生成qazxsw POI

foo()是串行化的字典的一种方式,并且仅将工作进行简单的变量可以被转换为JSON)

另一种方式是拿到一些变量会

{"a": null, "bb": null, "ccc": "lots of c", "de": 42}

0
投票

下面是使用json.dumps模块print( json.dumps( dict( a=a, b=b, c=c) )) 另一种方式:

ascii_lowercase
© www.soinside.com 2019 - 2024. All rights reserved.