Python:迭代引用其他列表的列表

时间:2015-03-17 16:01:58

标签: python list

这不是列表清单,也不知道问这个问题的正确方法。

我有一个变量列表,每个变量都是一个列表,我试图从列表中获取变量。

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

2 个答案:

答案 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