2015-03-17 2 views
0

Это не список списков, не знаю, как правильно это задавать.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 
.... 

Количество списков групп меняется, так что я не знаю хороший способ итерации через них получить список из них, кроме

Это, как я получаю 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)) 
+1

Почему вы пытаетесь это сделать? Почему бы просто не использовать один список под названием «группа» и получить доступ к отдельным подспискам как «группа [0]», «группа [1]» и т. Д.? – Kevin

+1

Или желательно сохранить ваши группы как ключи в словаре. –

+2

Ваш 'sortedList' - это список строк, а не список переменных. – MikeVaughan

ответ

1

Из вашего примера, у вас есть переменные, определенные в локальном пространстве имен интерпретатора, и вы хотите, чтобы ссылаться на имена в другом списке , Вы можете сделать это с помощью функции 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 

Некоторые считают этот последний метод предпочтителен, поскольку его более ясно, где группы пришли.

0

проблема заключается в том, что вы пытаетесь получить доступ к variab les 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

+0

Глобальное и местное пространства имен являются dicts, поэтому даже несмотря на то, что его общее для того, чтобы вставлять их в диктофон, вам не обязательно. – tdelaney

+0

@tdelaney Истинно, но если OP контролирует, как определены group0 и т. Д., Он будет более чистым и более удобным, чтобы просто переместить их в специальный dict. –

Смежные вопросы