def parse_numbers(numbers_string): return [int(n.strip()) for n in numbers_string.split(',')] assert parse_numbers('1, 2, 3') == [1, 2, 3] def parse_language(language_string): language, numbers_string = language_string.split(':') return language.strip(), parse_numbers(numbers_string) assert parse_language('English : 1, 2, 3') == ('English', [1, 2, 3]) def split_languages(languages): return [language.strip() for language in languages.split(';')] assert ( split_languages('English : 1, 2; Dutch : 5, 7') == ['English : 1, 2', 'Dutch : 5, 7'] ) def parse_languages(languages): return dict( parse_language(language) for language in split_languages(languages) ) assert ( parse_languages('English : 1, 2; Dutch : 5, 7') == { 'English' : [1, 2], 'Dutch' : [5, 7] } ) def parse_category(category_tuple): category, languages = category_tuple return category, parse_languages(languages) assert ( parse_category( ('person', 'English : 1, 2; Dutch : 5, 7') ) == ( 'person', { 'English' : [1, 2], 'Dutch' : [5, 7] } ) ) def parse_tuples(tuples): return dict(parse_category(category) for category in tuples) if __name__ == "__main__": tuplist = [('person', u'English : 1, 2, 3 ; Dutch : 5, 6, 7'), ('home', u'English : 8, 9, 10; Dutch: 11, 12, 13')] print parse_tuples(tuplist)