I’m trying to convert a list of lists with strings like:
[ ["amenity=language_school"], ["amenity=sport_school,place=rural", "amenity=sport_school,place=urban"], ["amenity=middle_school,place=city", "amenity=high_school,place=city"] ]
Some lists can have multiple string elements, and some of the string elements can have multiple key:values separated by a ,
like "amenity=high_school,place=city"
.
My goal is to get a list of dicts, in which the key of each dict could append in list several values from the same key. Like this:
[ {"amenity":"language_school"}, {"amenity":"sport_school", "place":["rural","urban"]}, {"amenity":["middle_school", "high_school"], "place":"city"} ]
Advertisement
Answer
This code works for you. Just if you want any list
with just one member to become converted to a simple String
it needs to add one line code to it.
Good wishes
output_list = [] for each_row in [ ["amenity=language_school"], ["amenity=sport_school,place=rural", "amenity=sport_school,place=urban"], ["amenity=middle_school,place=city", "amenity=high_school,place=city"] ]: output_list.append(dict()) for each_element in each_row: for each_def in each_element.split(','): key, value = each_def.split('=') if key in output_list[-1]: if value not in output_list[-1][key]: output_list[-1][key].append(value) else: output_list[-1][key] = [value] print(output_list)
The output:
[{'amenity': ['language_school']}, {'amenity': ['sport_school'], 'place': ['rural', 'urban']}, {'amenity': ['middle_school', 'high_school'], 'place': ['city']}]
And this is an alternative way with the same output:
output_list = [] for each_row in [ ["amenity=language_school"], ["amenity=sport_school,place=rural", "amenity=sport_school,place=urban"], ["amenity=middle_school,place=city", "amenity=high_school,place=city"] ]: output_list.append(dict()) for each_element in each_row: for each_def in each_element.split(','): key, value = each_def.split('=') content = output_list[-1].get(key, []) output_list[-1][key] = content + ([value] if value not in content else []) print(output_list)