Python で dict をS式に変換する

SVM-light-TK はインプットがS式なので、それに合わせてS式に変換したい。再帰を使おうとしたらけっこう面倒で、結果こうなった。

def dict_to_s_expression(d):
    class parse:
        def parser(self, d_list):
            for d in d_list:
                for key,value in d.iteritems():
                    self.parsed += "(%s " % key
                    if type(value) == self.list_type:
                        self.parser(value)
                        self.parsed += ")"
                    elif type(value) == self.dict_type:
                        self.parser([value])
                        self.parsed += ")"
                    else:
                        self.parsed += "%s)" % value

        def __init__(self, d_list):
            self.list_type = type(list())
            self.dict_Type = type(dict())
            self.parsed = ""
            self.parser(d_list)
    P = parse([d])
    return P.parsed

使うときは

d = {"NP": [{"D": "a"}, {"N": "dog"}]}
print dict_to_s_expression(d)