如何从变量数组中获取变量名作为字符串?
How to get the variable name as string from an array of variables?
我有一组数据帧:
a=[df1,df2,df3]
但我需要变量名作为字符串
b=['df1','df2','df3']
我该怎么做?
您可以使用列表理解:
a = [df1, df2, df3]
b = [x.name for x in a]
此答案假定数据框变量的名称与变量名称本身相匹配。
从 this answer 中汲取灵感,
您可以使用以下代码解决您的问题:
def get_var_name(variable):
for name, value in globals().items():
if value is variable:
return name
a = [df1, df2, df3]
b = [get_var_name(el) for el in a]
# print(b) gives ['df1', 'df2', 'df3']
在python中获取对象的变量名实际上是相当棘手的。 name->object 映射是严格的单向映射。更糟糕的是,多个名称可以引用同一个对象(内存地址中的相同数据块)。
不过,也不是没有可能。虽然这个方法很脏(当有多个名称引用同一个对象时。)
假设你的lista,你的dataframedf1,df2,df2都是全局变量,那么它们都在globals() .您可以试试下面的一行代码:
[i for i in globals().keys() if id(eval(i)) in [id(j) for j in a]]
你可以自己验证一下。
我有一组数据帧:
a=[df1,df2,df3]
但我需要变量名作为字符串
b=['df1','df2','df3']
我该怎么做?
您可以使用列表理解:
a = [df1, df2, df3]
b = [x.name for x in a]
此答案假定数据框变量的名称与变量名称本身相匹配。
从 this answer 中汲取灵感, 您可以使用以下代码解决您的问题:
def get_var_name(variable):
for name, value in globals().items():
if value is variable:
return name
a = [df1, df2, df3]
b = [get_var_name(el) for el in a]
# print(b) gives ['df1', 'df2', 'df3']
在python中获取对象的变量名实际上是相当棘手的。 name->object 映射是严格的单向映射。更糟糕的是,多个名称可以引用同一个对象(内存地址中的相同数据块)。
不过,也不是没有可能。虽然这个方法很脏(当有多个名称引用同一个对象时。)
假设你的lista,你的dataframedf1,df2,df2都是全局变量,那么它们都在globals() .您可以试试下面的一行代码:
[i for i in globals().keys() if id(eval(i)) in [id(j) for j in a]]
你可以自己验证一下。