# coding: utf-8 from __future__ import print_function, unicode_literals def to_list(lists): res = list() for l in lists: if not len(l)>=2 : print("Error") print(l) frs, sec = l if isinstance(sec , str) or isinstance(sec, unicode): res.append({'text': frs, 'dataIndex': sec}) elif isinstance(sec , tuple): res.append({'columns': [to_list(x) for x in sec] }) else: print("Error ?") return res r =( (u'Разрез', 'name'), (u'Забрано воды из природных водных объектов', ( (u'Всего', 'total'), (u'Пресной', ( (u'Всего', 'total_fresh'), (u'Из поверхностных', ( (u'Всего', 'total_surface'), (u'Перераспределенной', 'redistributed'), )), (u'Из подземных источников', ( (u'Всего', 'total_underground'), (u'Шахтно-рудничной', 'mines') )), (u'Моской', 'sea'), (u'Минеральной', 'mineral'), (u'Термальной', 'thermal'), )) )), (u'Сброшено воды в природные объекты', ( (u'Всего', 'droped_total'), (u'В том числе', ( (u'Транзитной', 'transit'), (u'В подземные ВО', 'underground_drop'), )) )), (u'Объем измеренной воды, забранной из природных водных объектов', ( (u'Всего', 'volume_total'), (u'Поверхностных', 'volume_surface'), )) ) print(to_list(r))