这不是列表清单,也不知道问这个问题的正确方法。
我有一个变量列表,每个变量都是一个列表,我试图从列表中获取变量。
>>> print sortedList
['group0', 'group1', 'group2', 'group3', 'group4', 'group5', 'group6', 'group7', 'group8', 'group9', 'group10', 'group11', 'group12']
>>> print group0
['abc']
>>> print group2
['combine', 'id']
我的循环无法做我想要的事情
for group in sortedList:
for job in group:
print job
g
r
o
u
p
0
....
群组列表的数量各不相同,所以除了获取列表之外,我不知道迭代它们的好方法
这就是我如何获得sortedList:
group_re = re.compile('(group)(\d+)', re.I)
totalVars = vars().keys()
myList = [ s for s in totalVars if group_re.match(s)]
sortedList = sorted(myList, key=lambda x: (len (x), x))
答案 0 :(得分:1)
在您的示例中,您在解释器的本地命名空间中定义了变量,并且您希望通过另一个列表中的名称来引用。您可以使用locals()
函数执行此操作,如下所示:
for group in sortedList:
for job in locals()[group]:
print job
如果这些变量是在模块级别定义的,那么您可以改为使用globals()[group]
。
根据您的更新信息,变量位于dependencies_groups
命名空间中,但由于您执行了from dependencies_groups import *
,因此它们也位于您的模块的全局变量中,应引用为{{1} }。您也可以使用其他功能从其他模块中获取它们:
globals()[group]
有些人认为最后一种方法更为可取,因为它更清楚地来自群体的来源。
答案 1 :(得分:0)
问题是你正在尝试使用字符串列表" group0"," group1"等来访问变量group0,group1等。你需要以某种方式将这些字符串映射到列表。这样做的常用方法是将组列表格式化为变量而不是dict条目。
这是一个有效的例子:
groups = {
"group0": ['abc'],
"group1": ['combine', 'id']
}
sortedList = [ "group0", "group1", "group2" ]
for name in sortedList:
group = groups.get(name)
if group:
print "Executing jobs from {0}...".format(name)
for job in group:
print "\tJob {0}".format(job)
else:
print "{0} not found!".format(name)
repl.it link:http://repl.it/eT1