这与在运行时检索变量/对象名称不同。
2G_Functions={'2G_1':2G_f1,'2G_2':2G_f2}
3G_Functions={'3G_1':3G_f1,'3G_2':3G_f2}
myFunctionMap=[2G_Functions,3G_Functions]
for i in myFunctionMap:
print i.??? "\n"
for j in i:
print str(j)
我希望输出如下所示。
2G_Functions:
2G_1
2G_2
3G_Functions:
3G_1
3G_2
如何在我的代码中获取字典变量的名称?我不知道我在循环中调用哪个来预先知道它的名字。
答案 0 :(得分:3)
尽管对其他答案持悲观态度,但在这种特殊情况下,如果没有为G2_Functions
和G3_Functions
标识的对象分配其他名称,则实际上可以执行您要求的操作(我冒昧地修复你的名字,这些名字不是有效的Python标识符。)话虽如此,这是一个可怕的,可怕的,可怕的主意,你不应该这样做这样做,因为它最终会破裂,你会感到难过。所以不要这样做。的自从强>
以下内容与您尝试做的类似:
alpha = {'a': 1, 'b': 2}
beta = {'c': 2, 'd': 4}
gamma = [alpha, beta]
listOfDefinedLocals = list(locals().iteritems())
for x, y in listOfDefinedLocals:
if y is gamma[0]: print "gamma[0] was originally named " + x
if y is gamma[1]: print "gamma[1] was originally named " + x
这将输出:
gamma[1] was originally named beta
gamma[0] was originally named alpha
对于您对此信息的处理方式,我不承担任何责任。它几乎可以保证在您需要时完全失败。我不是在开玩笑。
答案 1 :(得分:0)
myFunctionMap
列表包含对象,而不是上面2行附加的名称。顺便说一句,调用列表变量“map”不是一个好习惯,地图通常是字典。2G_Functions
和3G_Functions
将无效。e.g。
myFunctionMap = {
"2G_Functions" : { ... },
"3G_Functions" : { ... },
}
for (name, functions) in myFunctionMap.iteritems():
print name
for func in functions.keys():
print func
答案 2 :(得分:0)
简而言之,你不能。
如果你深入研究gc
模块(针对一般情况)或者使用locals()
和globals()
,那么有点可能......但是很可能更简单地定义列表如下:
myFunctionMap = [ ("someName", someName), … ]
for name, map in myFunctionMap:
print name
…
答案 3 :(得分:0)
尝试将列表列表改为字符串列表:
d2G_Functions={'2G_1':"2G_f1",'2G_2':"2G_f2"}
d3G_Functions={'3G_1':"3G_f1",'3G_2':"3G_f2"}
myFunctions=["2G_Functions","3G_Functions"]
for dict_name in myFunctions:
print dict_name
the_dict = eval("d"+dict_name)
for j in the_dict:
print str(j)
(我更改了原始变量的名称,因为python标识符不能以数字开头)