【问题标题】:How do I extract the name of a variable as a string in a list comprehension?如何在列表理解中将变量的名称提取为字符串?
【发布时间】:2019-06-24 11:04:39
【问题描述】:

我正在尝试将变量的名称提取为字符串。我已经定义了两个变量 CurrentField 和 PreviousField 并希望将这些名称提取为字符串以在我的代码中的其他地方使用。

CurrentField = ['One', 'Two']
PreviousField = ['One0', 'Two0']

def Updatedict(varname):
    callers_local_vars = inspect.currentframe().f_back.f_locals.items()
    stringvar = [k for k, v in callers_local_vars if v is varname][0]
    return stringvar

listofvars = [CurrentField, PreviousField]

ParameterDict = [Updatedict(keyname) for keyname in listofvars]

ParameterDict

我得到的只是一个列表,上面写着 ['keyname','keyname'] 而我正在寻找的是 ['CurrentField','PreviousField']。

如何获得我想要的输出?

提前非常感谢。

【问题讨论】:

  • 您可能会发现stackoverflow.com/questions/18425225/… 在这里很有用。底线是您实际上无法以编程方式获取大多数类型变量的变量名称。通常,当您看到有人试图查找变量名时,解决方案几乎总是他们应该改用字典。

标签: python string list dictionary list-comprehension


【解决方案1】:

你的循环出了什么问题,试试这个(根据F string prefix in python giving a syntax error适用于Python 3.6) :


In [23]: my_dict = {}
    ...: i = 0
    ...: for var in listofvars:
    ...:     my_dict.update({f"var_{i}":Updatedict(var)[0]})
    ...:     i += 1

In [24]: my_dict
Out[24]: {'var_0': 'CurrentField', 'var_1': 'PreviousField'}

顺便说一句,函数应该是小写,变量名也是如此,python类是大写

【讨论】:

  • 我在使用您的代码时不断收到无效语法作为错误消息。我正在使用 python 3.5.5 。很抱歉我之前没有提到这一点。
  • 我在引号和冒号之间的这部分代码中遇到语法错误 {f"var_{i}":Updatedict(var)
  • 只更改“i”(不带引号)
  • python 3.6 没有引入 f-strings 吗?
【解决方案2】:

如果您使用的是先前版本的 Python,因为上述代码适用于 Python 3.6 及更高版本,请使用以下代码:

my_dict = {}
i = 0
for var in listofvars:
    my_dict.update({"var_%s" %i : Updatedict(var)})
    i += 1

my_dict

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多