PyParsing: este uso correto de setParseAction ()?

Eu tenho seqüências de caracteres como esta:

"MSE 2110, 3030, 4102"

Gostaria de mostrar:

[("MSE", 2110), ("MSE", 3030), ("MSE", 4102)]

Esta é a minha maneira de fazer isso, embora eu ainda não tenha entendido:

def makeCourseList(str, location, tokens):
    print "before: %s" % tokens

    for index, course_number in enumerate(tokens[1:]):
        tokens[index + 1] = (tokens[0][0], course_number)

    print "after: %s" % tokens

course = Group(DEPT_CODE + COURSE_NUMBER) # .setResultsName("Course")

course_data = (course + ZeroOrMore(Suppress(',') + COURSE_NUMBER)).setParseAction(makeCourseList)

Isso gera:

>>> course.parseString("CS 2110")
([(['CS', 2110], {})], {})
>>> course_data.parseString("CS 2110, 4301, 2123, 1110")
before: [['CS', 2110], 4301, 2123, 1110]
after: [['CS', 2110], ('CS', 4301), ('CS', 2123), ('CS', 1110)]
([(['CS', 2110], {}), ('CS', 4301), ('CS', 2123), ('CS', 1110)], {})

É o caminho certo para fazê-lo ou estou totalmente de folga?

Além disso, a saída de não é muito correta - eu querocourse_data para emitir uma lista decourse símbolos que estão no mesmo formato um do outro. No momento, o primeiro curso é diferente dos outros. (Tem um{}, enquanto os outros não.)

questionAnswers(4)

yourAnswerToTheQuestion