Python:遍历引用其他列表的列表

2024-10-01 02:27:59 发布

您现在位置:Python中文网/ 问答频道 /正文

这不是一张单子,我不知道该怎么问

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

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

组列表的数量各不相同,所以除了得到它们的列表之外,我不知道迭代它们的好方法

我就是这样分类的:

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

Tags: inre列表forgroupjob单子print
2条回答

问题是您试图使用字符串“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链接:http://repl.it/eT1

在您的示例中,您在解释器的本地名称空间中定义了变量,并且希望通过另一个列表中的名称进行引用。您可以使用locals()函数来实现这一点,如下所示:

for group in sortedList:
    for job in locals()[group]:
        print job

如果这些变量是在模块级别定义的,那么应该改用globals()[group]

根据您更新的信息,变量位于dependencies_groups命名空间中,但由于您已from dependencies_groups import *,因此它们也位于模块的全局变量中,应作为globals()[group]引用。您还可以使用不同的功能从另一个模块获取它们:

import dependencies_groups
for group in sortedList:
    for job in getattr(dependencies_groups, group):
        print job

有些人认为最后一种方法更可取,因为它更清楚群体来自何处

相关问题 更多 >